2010-06-30 8 views
2

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

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

> 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 и переменные данные Int он глобальный 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 функции? Есть ли способ остановить это, или я делаю что-то неправильно?

Thanks

Paul.

ответ

3

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

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

 Смежные вопросы

  • Нет связанных вопросов^_^