1

for動物園クラスのデータセットをRにロードしていて、ループを実行しようとしています。しかし、私はエラーに遭遇し続けます

NextMethod( "[<-")のエラー:添え字が範囲外です。

ループはとてもシンプルです

startobs=5
for (i in startobs:(NROW(data)-startobs)) {
  data[startobs+i,"dummy"]=startobs+i

}

問題はにあると思いますstartobs+i。Rは、各要素を通過するときに、ループのインデックス( i)をに配置することを好まないようです。data[i,]私は何が間違っているのですか?


データの構成は次のとおりです。

>data

     obs     date   weight  dummy
      1   2010-10-04 52495   NA 
      2   2010-10-01 53000   NA 
      3   2010-09-30 52916   NA 
      4   2010-09-29 52785   NA 
      5   2010-09-28 53348   NA 
      6   2010-09-27 52885   NA 
      7   2010-09-24 52174   NA 
      8   2010-09-23 51461   NA 
      9   2010-09-22 51286   NA 
      10  2010-09-21 50968   NA 
      11  2010-09-20 49250   NA

>dput(head(data))
structure(c(100, 101.01, 110.75, 111.24, 104.96, 104.95, 104.06, 
109.08, 113.48, 111.6, 108, 107.95, 95.96, 100.5, 109.05, 103.57, 
103.88, 104.66, 100.34, 108.31, 109.4, 104.87, 106, 107.91, 22351900, 
11428600, 9137200, 7631300, 4598900, 3551000, 100.34, 108.31, 
109.4, 104.87, 106, 107.91, NA, NA, NA, NA, NA, NA), .Dim = 6:7, .Dimnames = list(
    NULL, c("weight", "height", "BMI", "Age", "Age2", "Intr", 
    "Chol")), index = structure(c(12649, 12650, 12653, 12654, 
12655, 12656), class = "Date"), class = "zoo")
4

1 に答える 1

4

あなたがするつもりです:

for (i in 1:NROW(data)) {
    data[i, "dummy"] = i
}

ただし、forループで実行しようとしていることは、を使用するようなベクトル化されたソリューションを使用すると、おそらく簡単になりますifelse

于 2013-01-06T06:46:23.437 に答える