これは、R コードをデバッグする私の能力に本当に挑戦しました。
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が役立つかもしれないと思いましたが、今日は十分に頭を悩ませたので、手を挙げて助けを求める時が来ました。