ddply correre in un aspetto delle funzioni nell'ambiente esterno la funzione?
-
01-10-2019 - |
Domanda
Sto cercando di scrivere una funzione per fare un po 'di analisi, spesso ripetute, e una parte di questo è quello di contare il numero di gruppi e il numero di membri all'interno di ciascun gruppo, in modo ddply in soccorso!, Però, il mio codice ha un problema ....
Ecco alcuni dati esempio
> 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")
e qui è il mio codice
foo<-function(exp1, exp2, data) {
datadesc<-ddply(data, .(with(data, get(exp2))), nrow)
return(datadesc)
}
Se corro questa funzione, si ottiene un errore
> foo(exp="Machine",exp1="weight",data=BGBottles)
Error in eval(substitute(expr), data, enclos = parent.frame()) :
invalid 'envir' argument
Tuttavia, se io definisco la mia exp1, EXP2 e dati variabili int egli environemtn globale prima, funziona
> 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
Quindi, presumo ddply è in esecuzione al di fuori della environemtn della funzione? Esiste un modo per fermare questo, o sto facendo qualcosa di sbagliato?
Grazie
Paul.
Soluzione
Questo è un esempio di questo bug: http://github.com/hadley / plyr / problemi # edizione / 3 . Ma, come sottolinea Marek, non hai bisogno di arrivare qui in ogni caso.
Altri suggerimenti
get
Non è necessario:
foo<-function(exp1, exp2, data) {
datadesc<-ddply(data, exp2, nrow)
return(datadesc)
}