Это действительно поставило под сомнение мою способность отлаживать код R.
Я хочу использовать ddply()
для применения одних и тех же функций к разным столбцам с последовательными именами; например. а, б, в. Для этого я намерен многократно передавать имя столбца в виде строки и использовать 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 даже определяется внутри функции!
Я подумал, что ответ на этот вопрос: циклы-для-создания-новых-переменных- in-ddply, может мне помочь, но на сегодня я уже намотал себе голову, и пора поднять руку и попросить о помощи.