ddply запустить в функции выглядит в среде за пределами функции? - PullRequest
2 голосов
/ 30 июня 2010

Я пытаюсь написать функцию для выполнения часто повторяющегося анализа, и одна часть этого состоит в подсчете количества групп и количества членов в каждой группе, так что попробуйте спасти! Однако мой код имеет проблема ....

Вот некоторые примеры данных

> dput(BGBottles)
structure(list(Machine = structure(c(1L, 1L, 1L, 2L, 2L, 2L, 
3L, 3L, 3L, 4L, 4L, 4L), .Label = c("1", "2", "3", "4"), class = "factor"), 
    weight = c(14.23, 14.96, 14.85, 16.46, 16.74, 15.94, 14.98, 
    14.88, 14.87, 15.94, 16.07, 14.91)), .Names = c("Machine", 
"weight"), row.names = c(NA, -12L), class = "data.frame")

и вот мой код

foo<-function(exp1, exp2, data) {
 datadesc<-ddply(data, .(with(data, get(exp2))), nrow)
 return(datadesc)
}

Если я запускаю эту функцию, я получаю сообщение об ошибке

> foo(exp="Machine",exp1="weight",data=BGBottles)
Error in eval(substitute(expr), data, enclos = parent.frame()) : 
  invalid 'envir' argument

Однако, если я сначала определю свои переменные exp1, exp2 и данные в глобальном environemtn, это сработает

> exp1<-"weight"
> exp2<-"Machine"
> data<-BGBottles
> foo(exp="Machine",exp1="weight",data=BGBottles)
  with.data..get.exp2.. V1
1                     1  3
2                     2  3
3                     3  3
4                     4  3

Итак, я предполагаю, что ddply работает вне environemtn функции? Есть ли способ остановить это, или я делаю что-то не так?

Спасибо

Paul.

Ответы [ 2 ]

3 голосов
/ 30 июня 2010

Вам не нужно get:

foo<-function(exp1, exp2, data) {
    datadesc<-ddply(data, exp2, nrow)
    return(datadesc)
}
2 голосов
/ 30 июня 2010

Это пример этой ошибки: http://github.com/hadley/plyr/issues#issue/3. Но, как указывает Марек, вам все равно не нужно сюда заходить.

...