R でいえば
func = function(a = NA, b = NA, c = NA) {
print(sum(sapply(list(a, b, c), is.na)))
}
※注
print(sum(sapply(list(a, b, c), is.na)))
よりは
print(sum(is.na(c(a, b, c))))
のほうがよいが,以下の Python プログラムの場合と近づけるためにこのように書いた
Python でいえば
import numpy as np
NA = np.nan
def func(a = NA, b = NA, c = NA):
print(sum(np.isnan(arg) for arg in [a, b, c]))
のような関数定義があったとき,func が呼ばれたときの引数の値が NA であったものの個数をチェックするにはどうするかということ。
R では
func = function(a = NA, b = NA, c = NA) {
print(sum(sapply(list(a, b, c), is.na)))
}
func() # 3
func(a = 1) # 2
func(a = 3, c = 4) # 1
func(a = 1, b = 4, c = 9) # 0
Python では
import numpy as np
NA = np.nan
def func(a = NA, b = NA, c = NA):
print(sum(np.isnan(arg) for arg in [a, b, c]))
func() # 3
func(a = 1) # 2
func(a = 3, c = 4) # 1
func(a = 1, b = 4, c = 9) # 0
となる。
決して,以下のようにしてはならない。どの場合も 0 になってしまう。
def func(a = NA, b = NA, c = NA):
print(sum(arg == NA for arg in [a, b, c]))
func() # 0
func(a = 1) # 0
func(a = 3, c = 4) # 0
func(a = 1, b = 4, c = 9) # 0