これは実際にRコードをデバッグする私の能力に挑戦しています。関数内でddplyでオブジェクトが見つかりません
私はddply()
を使用して、連続して名前が付けられた異なる列に同じ機能を適用したいと思います。例えば。 a、b、c。これを行うには、列名を文字列として繰り返し渡し、関数が参照できるようにeval(parse(text=ColName))
を使用します。私は別の答えからこのテクニックをつかんだ。
これは、別の機能の中にddply()
を入れるまで、うまくいきます。ここではサンプルコードは次のとおりです。
# Required packages:
library(plyr)
myFunction <- function(x, y){
NewColName = "a"
z = ddply(x, y, summarize,
Ave = mean(eval(parse(text=NewColName)), na.rm=TRUE)
)
return(z)
}
a = c(1,2,3,4)
b = c(0,0,1,1)
c = c(5,6,7,8)
df = data.frame(a,b,c)
sv = c("b")
#This works.
ColName = "a"
ddply(df, sv, summarize,
Ave = mean(eval(parse(text=ColName)), na.rm=TRUE)
)
#This doesn't work
#Produces error: "Error in parse(text = NewColName) : object 'NewColName' not found"
myFunction(df,sv)
#Output in both cases should be
# b Ave
#1 0 1.5
#2 1 3.5
任意のアイデア? NewColNameは関数内でも定義されています!
私はこの質問の答えがloops-to-create-new-variables-in-ddplyだと思っていましたが、今日は十分な頭を叩いてしまいました。そして手を挙げて助けを求める時です。
私は解決策が@Hadley関数を必要とするかもしれないと思っています:-) –
これらすべてを試すのに大変な努力をしました。グループヘッドバンギングは常に高く評価されています......私は自分の魂を保ちます –