2

変数 ID に基づいて特定のデータセットを参照するコードがある場合があります。次に、 を使用してコード行を作成しpaste0eval(parse(...))その行でコードを実行しました。これは、コードの長さが長くなるにつれて、ずさんになっているようです。動的データ参照を行うよりクリーンな方法はありますか?

例:

dataset <- "dataRef"

execute <- paste0("data.frame(", dataset, "$column1, ", dataset, "$column2)")
eval(parse(execute))

しかし、1000 行のコードに対して dataRef が呼び出され、場合によっては dataRef2 または dataRefX に変更する必要があるシナリオを想像してみてください。

4

2 に答える 2

3

@G.Grothendieck は、文字値を使用getおよび[昇格させ、名前付きオブジェクトの値を返し、そのオブジェクト内の名前付き要素を参照する方法を示しました。htat コードを実行した結果、コンソールに値が配信されるため、コードの目的はわかりませんが、値は名前に割り当てられておらず、ガベージ コレクションが行われていました。objname、colname1、colname2 の 3 つの文字値を使用したい場合、これらの列は 4 番目の文字値にちなんで名付けられたオブジェクトと同じです。

 newname <- "newdf"

 assign( newname, get(dataset)[ c(colname1, colname2) ]

学ぶべき教訓はassignget文字の文字値を取得し、データオブジェクトまたは関数のいずれかである名前付きオブジェクトにアクセスまたは作成できることです。Carl_Witthoft は、文字値から関数呼び出しを構築できる do.call について言及しています。

do.call("data.frame", setNames(list( dfrm$x,  dfrm$y), c('x2','y2') )

 do.call("mean", dfrm[1]) 
# second argument must be a list of arguments to `mean`
于 2013-08-29T19:49:31.090 に答える