Ошибка объекта не найден с ddply внутри функции

Это действительно поставило под сомнение мою способность отлаживать код 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 даже определяется внутри функции!

Я подумал, что ответ на этот вопрос, loops-to-create-new-variables-in-ddply , мог бы мне помочь, но я уже наделал много шума на сегодня пора поднять руку и попросить о помощи.

40
задан Community 23 May 2017 в 12:34
поделиться