2

データ フレームを作成し、データ フレーム内の列にアクセスしようとしています。コードは以下のとおりです

df <- data.frame(n = c('A','B','C'),
                 mark_1 = c(23,25, 17),
                 mark_2 = c(45,46,50))

j <- paste('mark',1,sep="_")
j

f <- '$'(df,j)
summary(f)

n <- '$'(df,"mark_1")
summary(n)

このコードを実行すると、これが得られます

    > j <- paste('mark',1,sep="_")
    > j
    [1] "mark_1"
    > f <- '$'(df,j)
    > summary(f)
    Length  Class   Mode 
         0   NULL   NULL 
    > n <- '$'(df,"mark_1")
    > summary(n)
       Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
      17.00   20.00   23.00   21.67   24.00   25.00 
    > 

summary(f) が機能しないのはなぜですか? j は "mark_1" に適切に連結されます。では、なぜエラーが発生するのでしょうか。

前もって感謝します

4

4 に答える 4

6

@TylerRinkerは、代わりに何をすべきかを示しました。

...しかし、使用できない理由'$'(df,j)は、ドル演算子が2番目の引数を文字通り使用するためです。

...それで'$'(df,mark_1)うまくいくでしょう。しかし、単純に変数を渡すことはできません。それが何のため[であるか[[

df[,j]  # The j'th column
df[[j]] # Pretend df is a list of columns and get the j'th element
于 2012-05-11T07:21:30.080 に答える
4

'$'(df,j)と同等ですdf$j-- 値ではなく、引数の名前を調べます。df[[j]]代わりにordf[,j]またはを使用できます'[['(df,j)(ただし、コードを読みにくくしたくない場合を除き、最後のものは避けてください)。

df$j <- 1

# The "j" column
df$j
`$`(df,j)
`[[`(df,"j")
df[["j"]]
df[,"j"]

# The "mark_1" column
df[[j]]
df[,j]
`[[`(df,j)
于 2012-05-11T07:23:10.210 に答える
2

で適用する場合は、「$」を使用できますdo.calldo.call関数の名前が言語値ではなく文字である場合に役立ちます。この場合、2 番目の引数であるデータフレームと列名のリストも評価されます。

do.call('$', list(df, j))
[1] 23 25 17

とはいえ、第2引数の評価を行う「[[」や「[」を使うのは当然のことだと思います。

于 2012-05-11T11:24:30.197 に答える