1. ホーム
  2. r

[解決済み】R - if文の引数の長さが0である。

2022-01-26 19:12:01

質問

Rでちょっとした問題が発生しています。それは、この行を私に言っています。 if(temp > data[[k]][[k2]]) { は、引数の長さが0です。

for(k in 1:length(data)) { 
      temp <- 0
      for(k2 in 3:length(data[[k]])) {
           print(data[[k]][[k2]])
           if(temp > data[[k]][[k2]]) {
                temp <- data[[k]][[k2]]
            }
            fMax[k] <- temp
           k2 <- k2 + 1
      }
 k <- k + 1
 }

data[[k]][[k2]]に含まれるものの例です。

[1] "3050"
[1] "3051"
[1] "3054"
[1] "3054"
[1] "3052"
[1] "3053"
[1] "3059"
[1] "3059"
[1] "3057"
[1] "3060"
[1] "3063"
[1] "3060"
[1] "3068"
[1] "3067"
[1] "3079"
[1] "3085"
[1] "3094"
[1] "3107"
[1] "3121"
[1] "3135"
[1] "3147"
[1] "3161"
[1] "3200"
[1] "3237"
[1] "3264"
[1] "3274"
[1] "3284"
[1] "3289"
[1] "3292"
[1] "3300"
[1] "3301"
[1] "3303"
[1] "3306"
[1] "3310"
[1] "3312"
[1] "3313"
[1] "3319"
[1] "3314"
[1] "3318"
[1] "3318"
[1] "3320"
[1] "3322"
[1] "3322"
[1] "3322"
[1] "3328"
[1] "3332"
[1] "3338"
[1] "3350"
[1] "3358"
[1] "3378"
[1] "3395"
[1] "3402"
[1] "3875"
[1] "3950"
[1] "3988"
[1] "4018"
[1] "4039"
[1] "4048"
[1] "4057"
[1] "4062"
[1] "4067"
[1] "4076"
[1] "4082"
[1] "4085"
[1] "4092"
[1] "4098"
[1] "4099"
[1] "4101"
[1] "4107"
[1] "4119"
[1] "4139"
[1] "4164"
[1] "4231"
[1] "4347"
[1] "4559"

ありがとうございます - Sam

解決するには?

「引数の長さが0である」というのは、私がRの中で最も嫌いな要素の1つである、非常に特殊な問題です。

> FALSE == "turnip"
[1] FALSE
> TRUE == "turnip"
[1] FALSE
> NA == "turnip"
[1] NA
> NULL == "turnip"
logical(0)

見ての通り、NULLとの比較はブール値を生成しないだけでなく、全く値を生成しません。そして、制御フローはチェックにより いくつか {を使用します。 のような出力が得られます。長さ0の出力が出たら... "引数は長さゼロ "です。

(なぜこれがそんなに腹立たしいのか、非常に長いラントがあります。 それは後回しにしてください)。

そこで質問なのですが、以下の出力はどうなるのでしょうか? sum(is.null(data[[k]]))? もし 0 でないなら、データセットに NULL 値が埋め込まれていることになるので、該当する行を削除するか、チェックを

if(!is.null(data[[k]][[k2]]) & temp > data[[k]][[k2]]){
    #do stuff
}

データセット全体を見ないと何とも言えませんが、参考になれば幸いです。もしこれで問題が解決せず、どこかにNULL値が入り込んでいるのでなければ、残念ながら私には見当もつきません。