Chyba znalazłem sposób, że działa z przedstawiono podsumowanie. Nie jestem pewien, czy rozumiem dlaczego, ponieważ nie jestem ekspertem w kontaktach ze środowiskami w R, ale tutaj jest rozwiązanie:
> 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: Można użyć funkcji get
z pakietu podstawowego, jak sugeruje tutaj: 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
Czy masz powtarzalny przykład (z danymi, np. za pomocą tęczówki)? –
@static_rtti szukasz konkretnie odpowiedzi 'plyr'? To pytanie jest bardzo stare i są obecnie znacznie bardziej zaawansowane pakiety. –
Cóż, używam plyr (i nie znam bardziej zaawansowanych pakietów), ale jeśli potrafisz udzielić odpowiedzi na ten sam problem z inną paczką, to też by mnie zainteresowało. –