2015-11-19 12 views
9

Sto cercando di capire perché sto ricevendo un messaggio di errore quando si utilizza ddply.comprensione messaggio di errore ddply

dati Esempio:

data<-data.frame(area=rep(c("VA","OC","ES"),each=4), 
    sex=rep(c("Male","Female"),each=2,times=3), 
    year=rep(c(2009,2010),times=6), 
    bin=c(110,120,125,125,110,130,125,80,90,90,80,140), 
    shell_length=c(.4,4,1,2,.2,5,.4,4,.8,4,.3,4)) 

bin7<-ddply(data, .(area,year,sex,bin), summarize,n_bin=length(shell_length)) 

Messaggio di errore: Errore in .fun (pezzo, ...): argomento "da" manca, alcun valore predefinito

ho ricevuto questo messaggio di errore ieri . Ho riavviato R e reran il codice e tutto andava bene. Questa mattina ho ricevuto di nuovo il messaggio di errore e il riavvio di R non ha risolto il problema.

Ho anche provato a eseguire qualche esempio code e ho ricevuto lo stesso messaggio di errore.

# Summarize a dataset by two variables 
require(plyr) 
dfx <- data.frame(
    group = c(rep('A', 8), rep('B', 15), rep('C', 6)), 
    sex = sample(c("M", "F"), size = 29, replace = TRUE), 
    age = runif(n = 29, min = 18, max = 54) 
) 

# Note the use of the '.' function to allow 
# group and sex to be used without quoting 
ddply(dfx, .(group, sex), summarize, 
mean = round(mean(age), 2), 
sd = round(sd(age), 2)) 

informazioni R

R version 3.2.1 (2015-06-18) 
Platform: i386-w64-mingw32/i386 (32-bit) 
Running under: Windows 7 x64 (build 7601) Service Pack 1 

locale: 
[1] LC_COLLATE=English_United States.1252 
[2] LC_CTYPE=English_United States.1252 
[3] LC_MONETARY=English_United States.1252 
[4] LC_NUMERIC=C       
[5] LC_TIME=English_United States.1252  

attached base packages: 
[1] grid  stats  graphics grDevices utils  datasets 
[7] methods base  

other attached packages: 
[1] Hmisc_3.17-0  ggplot2_1.0.1  Formula_1.2-1  
[4] survival_2.38-1  car_2.0-26   MASS_7.3-40   
[7] xlsx_0.5.7   xlsxjars_0.6.1  rJava_0.9-7   
[10] plyr_1.8.3   latticeExtra_0.6-26 RColorBrewer_1.1-2 
[13] lattice_0.20-31 

Se qualcuno potesse spiegare perché questo sta accadendo lo apprezzerei.

Grazie

+1

Non è possibile riprodurre l'errore utilizzando la stessa versione di plyr. Hai caricato 'plyr' e' dplyr' allo stesso tempo? – akrun

+1

Non ho ricevuto l'errore. Ma ho chiamato il dataframe 'd'. Anche la formula funziona: 'ddply (d, ~ area + year + sex + bin, riepiloga, n_bin = length (shell_length))' – jogo

+4

Sia 'dplyr' che' plyr' hanno funzioni chiamate 'riepilogo '. Probabilmente hai anche caricato 'dplyr'. 'disconnetti entrambi i pacchetti e poi carica' plyr' prima di caricare 'dplyr'. –

risposta

14

Come indicato nel commento di Narendra alla domanda, questo errore possono essere causati da caricamento di altri pacchetti che hanno una funzione chiamata summarize (o summarise) che non funziona come la funzione in plyr. Per esempio:

library(plyr) 
library(Hmisc) 

ddply(iris, "Species", summarize, mean_sepal_length = mean(Sepal.Length)) 
#> Error in .fun(piece, ...) : argument "by" is missing, with no default 

Una soluzione è quella di chiamare la funzione corretta con :: e lo spazio dei nomi corretto:

ddply(iris, "Species", plyr::summarize, mean_sepal_length = mean(Sepal.Length)) 
#> Species mean_sepal_length 
#> 1  setosa    5.006 
#> 2 versicolor    5.936 
#> 3 virginica    6.588 

In alternativa, si può staccare il pacchetto che ha la funzione di sbagliato:

detach(package:Hmisc) 
ddply(iris, "Species", summarize, mean_sepal_length = mean(Sepal.Length)) 
#> Species mean_sepal_length 
#> 1  setosa    5.006 
#> 2 versicolor    5.936 
#> 3 virginica    6.588 

Infine, se uno ha bisogno di entrambi i pacchetti e non vuole preoccuparsi di ::, è possibile caricarli nell'altro ordine:

library(Hmisc) 
library(plyr) 

ddply(iris, "Species", summarize, mean_sepal_length = mean(Sepal.Length)) 
#> Species mean_sepal_length 
#> 1  setosa    5.006 
#> 2 versicolor    5.936 
#> 3 virginica    6.588 
1

ho avuto un problema simile (con un set di dati diversi, ma lo stesso messaggio di errore), ma ho scoperto che ddplyr utilizzato l'ortografia del Regno Unito "riassumere". Una volta apportato il cambio di spelling, il codice ha funzionato.

Ecco il codice che ho usato. Quando ho usato l'ortografia "z", ho ricevuto il messaggio di errore Error in .fun(piece, ...) : argument "by" is missing, with no default; ma passare a "s" l'ha risolto.

library(plyr) 
ddply(InsectSprays,.(spray),summarise,sum=sum(count)) 
+0

Questo mi ha aiutato. Grazie! – GlennFriesen