11

次の例を使用して $a にアクセスしようとしています:

df<-data.frame(a=c("x","x","y","y"),b=c(1,2,3,4))

> df
  a b
1 x 1
2 x 2
3 y 3
4 y 4

test_fun <- function (data.frame_in) {
    print (data.frame_in[1])
    }

最初の列にインデックスを使用すると、$a にアクセスできるようになりました。

適用 (df、1、test_fun)

  a 
"x" 
  a 
"x" 
  a 
"y" 
  a 
"y" 
[1] "x" "x" "y" "y"

しかし、$ 表記で列 $a にアクセスできません: エラー: "$ 演算子は原子ベクトルに対して無効です"

test_fun_2 <- function (data.frame_in) {
    print (data.frame_in$a)
    }

>apply(df, 1, test_fun_2)
Error in data.frame_in$a : $ operator is invalid for atomic vectors

これは不可能ですか?

4

3 に答える 3

20

adply代わりに plyr パッケージから使用できます。

library(plyr)
adply(df, 1, function (data.frame_in) print(data.frame_in$a))
于 2010-03-23T03:10:40.227 に答える
11

data.frame.indata.frameではないため:

apply(df, 1, function(v){print(class(v))})

ただし、次のコマンドで名前付き要素にアクセスできます。

test_fun_2 <- function (data.frame_in) {
+     print (data.frame_in['a'])}
于 2010-03-23T02:35:25.960 に答える
5

apply関数のデータ型を変更するため:

> apply(df, 1, class)
[1] "character" "character" "character" "character"

> apply(df, 1, colnames)
NULL

列名がないため、$演算子で値を参照することはできません。

applyドキュメントから:

Xが配列ではないが、次元属性を持っている場合、適用は、それが2次元(データフレームなど)の場合はas.matrixを介して、またはas.arrayを介して配列に強制しようとします。

于 2010-03-23T02:34:34.590 に答える