裏 RjpWiki

文字通り,RjpWiki の裏を行きます
R プログラム コンピュータ・サイエンス 統計学

関数において,特定の値 NA を取る引数の個数

2020年11月22日 | ブログラミング

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

 

 

コメント   この記事についてブログを書く
« あまりにも長い変数名はどう... | トップ | ややこしいプログラム -- R ... »
最新の画像もっと見る

コメントを投稿

ブログ作成者から承認されるまでコメントは反映されません。

ブログラミング」カテゴリの最新記事