1. ホーム
  2. r

[解決済み] if` 関数の「condition has length > 1」警告を解釈する

2022-02-14 12:30:34

質問

配列があります。

a <- c(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)

で、以下のような関数を実装したい。

w<-function(a){
  if (a>0){
    a/sum(a)
  }
  else 1
}

この関数は a 0より大きい場合は、各要素を合計値で割る。

そうでない場合は、1 を記録するだけです。

次のような警告メッセージが表示されるのですが。

 Warning message:
 In if (a > 0) { :
 the condition has length > 1 and only the first element will be used

関数を修正するにはどうしたらよいですか?

どのように解決するのですか?

もしかしたら ifelse :

a <- c(1,1,1,1,0,0,0,0,2,2)
ifelse(a>0,a/sum(a),1)

 [1] 0.125 0.125 0.125 0.125 1.000 1.000 1.000 1.000
 [9] 0.250 0.250