Cela a vraiment mis au défi ma capacité à déboguer du code R.
Je veux utiliser ddply()
pour appliquer les mêmes fonctions à différentes colonnes nommées de manière séquentielle, par exemple a, b, c. Pour ce faire, j'ai l'intention de transmettre de manière répétée le nom de la colonne sous forme de chaîne et d'utiliser la fonction eval(parse(text=ColName))
pour permettre à la fonction de le référencer. J'ai récupéré cette technique dans une autre réponse.
Et cela fonctionne bien, jusqu'à ce que je mette ddply()
à l'intérieur d'une autre fonction. Voici l'exemple de code :
# 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
Des idées ? NewColName est même défini à l'intérieur de la fonction !
Je pensais que la réponse à cette question, loops-to-create-new-variables-in-ddply Il pourrait m'aider, mais j'ai assez tapé sur la tête pour aujourd'hui et il est temps de lever la main et de demander de l'aide.