1

集計を実行したい列名の文字配列 ( chr [1:5]named ) があります。keynn配列のすべての要素は、データ フレーム ( ) の有効な列名ですがmydata、変数ではなく文字列です ( ではなく "YEAR" mydata$YEAR)。

名前から列を返すために使用しようとしget()ましたが、最初の要素に対して次のように機能します。

attach(mydata)
aggregate(mydata, by=list(get(keynn, .GlobalEnv)), FUN=length)

次のように、配列が複数の要素であるため、mget() を使用してみました。

attach(mydata)
aggregate(mydata, by=list(mget(keynn, .GlobalEnv)), FUN=length)

しかし、私はエラーが発生します:

value for 'YEAR' not found.

複数の列を集計するためのgetに相当するものを取得するにはどうすればよいですか?

ありがとうございました!

4

1 に答える 1

2

attach一般的には使用しないことをお勧めします

列を取得しようとしているだけの場合は、リストにインデックスを付けるためにmydata使用できます[

aggregate(mydata, by = mydata[keynn], FUN = length)

keynn動作するはずです-そして、あなたが取得したいことは非常に明確ですmydata

使用の問題は、検索パスattachに追加されることです (グローバル環境にコピーされません)。mydata

試す

 attach(mydata)
 mget(keynn, .GlobalEnv)

したがって、mgetandを使用するattach場合は、

 mget(keynn, .GlobalEnv, inherits = TRUE)

グローバル環境で検索しないようにします。

しかし、それは価値があるよりも多くの努力です(IMHO)

機能する理由getinherits = TRUE、デフォルトであるからです。lapply(keynn, get)したがって、接続されている場合は使用できますがmydata、これも見苦しく、それが何をしているのか不明です。


別のアプローチは、問題の data.table 内data.tableの引数を評価するを使用することです。by

 library(data.table)

 DT <- data.table(mydata)

 DT[, {what you want to aggregate} , by =keynn]

keynn は名前の文字ベクトルである必要はなく、名前のリストまたは名前の関数の名前付きリストなどにすることができることに注意してください。

于 2013-03-08T00:58:43.123 に答える