這真的對我調試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函數:-) –
嘗試所有這些努力。羣頭猛擊永遠是我的讚賞......我會保持靈魂 –