supongo que encontré una manera que funciona con resumir. No estoy seguro si entiendo por qué, ya que no soy un experto en el tratamiento de los entornos en R, pero aquí está la solución:
> library(plyr)
>
>
>
> ###########################
> # Creating test DataFrame #
> ###########################
>
> x <- 1:15
>
> set.seed(1)
> y <- letters[1:3][sample(1:3, 15, replace = T)]
>
> df <- data.frame(x, y)
>
> ### check df
> df
x y
1 1 a
2 2 b
3 3 b
4 4 c
5 5 a
6 6 c
7 7 c
8 8 b
9 9 b
10 10 a
11 11 a
12 12 a
13 13 c
14 14 b
15 15 c
>
>
> #####################
> # auxiliar function #
> #####################
> evalString <- function(s) {
+ eval(parse(text = s), parent.frame())
+ }
>
>
> ### columnName input
> columnName <- 'x'
>
> ### call with columnName as input
> xMeans <- ddply(df,
+ 'y',
+ summarise,
+ mean = mean(evalString(columnName)))
>
>
> ### regular call to ddply
> xMeans2 <- ddply(df,
+ 'y',
+ summarise,
+ mean = mean(x))
>
>
> ### Compare Results
> xMeans
y mean
1 a 7.8
2 b 7.2
3 c 9.0
> xMeans2
y mean
1 a 7.8
2 b 7.2
3 c 9.0
>
EDIT: Puede utilizar la función get
del paquete base, como se sugiere aquí: ddply: how do I pass column names as parameters?
> xMeans3 <- ddply(df,
+ 'y',
+ summarise,
+ mean = mean(get(columnName)))
>
> xMeans3
y mean
1 a 7.8
2 b 7.2
3 c 9.0
¿Tiene un ejemplo reproducible (con datos, por ejemplo, utilizando iris)? –
@static_rtti ¿está buscando específicamente una respuesta 'plyr'? Esta pregunta es muy antigua y actualmente hay paquetes mucho más avanzados. –
Bueno, yo uso plyr (y no sé de paquetes más avanzados), pero si puede dar una respuesta al mismo problema con un paquete diferente, también lo encontraría interesante. –