2

私はすでに関数を定義しています(正常に動作します)。それにもかかわらず、同じ機能を実行したい作業スペースに20個のデータフレームがありlapplyます(dat1からdat20まで)。

これまでのところ、次のようになります。

dat1 <- func(dat=dat1)
dat2 <- func(dat=dat2)
dat3 <- func(dat=dat3) 
dat4 <- func(dat=dat4)
...
dat20 <- func(dat=dat20)

ただし、より短いコマンドでこれをよりエレガントに行う方法、つまりlapplyすべてのデータフレームを一度に機能させる方法はありますか?

私はこれを試しましたが、うまくいきませんでした:

mylist <- paste0("dat", 1:20, sep="")
lapply(mylist, func) 
4

3 に答える 3

1

変数の名前がある場合はget()、ワークスペースから値を取得するために使用できます。対応する代入関数が呼び出されassign()ます:

mylist <- paste0("dat", 1:20)
lapply(mylist, function(name) assign(name, func(dat=get(name))) )
于 2013-08-26T16:27:29.890 に答える
1

次のようなものを試してください:

lapply(mget(ls(pattern="dat")),func)

詳細: patternin の引数は、lsリストするオブジェクト名を制限します (たとえば、グローバル環境に関数を含む他のオブジェクトがあると仮定します)。mgetこれらのオブジェクトを環境から取得し、それらをリストに変換します。これをlapply関数で処理できます。

于 2013-08-26T16:26:14.293 に答える
1

目的の動作は、lapply の代わりに eval を使用して取得できます。

mylist適用したい data.frame の名前であると仮定しますfunmylistを使用して生成される可能性があります

mylist <- ls(pattern="dat")

次に、次のコードを使用して、必要なことを正確に行うことができます。

cCmd  <- paste(mylist , "<- func(" ,mylist,")", sep="")
eCmd  <- parse(text=cCmd)
eval(eCmd)
于 2014-07-07T11:38:30.180 に答える