2015-11-19 19 views
9

Tôi đang cố gắng tìm ra lý do tại sao tôi nhận được thông báo lỗi khi sử dụng ddply.hiểu thông báo lỗi ddply

dữ liệu Ví dụ:

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)) 

Thông báo lỗi: Lỗi trong .fun (piece, ...): đối số "bởi" là mất tích, không có mặc định

tôi đã thông báo lỗi này ngày hôm qua . Tôi khởi động lại R và chạy lại mã và mọi thứ đều ổn. Sáng nay tôi nhận được thông báo lỗi một lần nữa và khởi động lại R đã không giải quyết được vấn đề.

Tôi cũng đã cố gắng chạy một số ví dụ code và nhận được thông báo lỗi tương tự.

# 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)) 

thông tin 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 

Nếu ai đó có thể vui lòng giải thích lý do tại sao điều này xảy ra tôi sẽ đánh giá cao nó.

Cảm ơn

+1

Không thể tạo lại lỗi bằng cách sử dụng cùng một phiên bản plyr. Bạn đã nạp 'plyr' và' dplyr' cùng một lúc chưa? – akrun

+1

Tôi không nhận được lỗi. Nhưng tôi đặt tên cho khung dữ liệu 'd'. Ngoài ra công thức công thức: 'ddply (d, ~ area + year + sex + bin, tóm tắt, n_bin = length (shell_length))' – jogo

+4

Cả hai 'dplyr' và' plyr' đều có các hàm có tên 'summaryize'. Có thể bạn cũng đã tải 'dplyr'. 'tách' cả hai gói và sau đó tải 'plyr' trước khi tải' dplyr'. –

Trả lời

14

Như đã nêu trong bình luận của Narendra cho câu hỏi, lỗi này có thể được gây ra bằng cách tải các gói khác có một chức năng gọi là summarize (hoặc summarise) mà không làm việc như các chức năng trong plyr. Ví dụ:

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 

Một giải pháp là để gọi hàm đúng với :: và không gian tên chính xác:

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 

Ngoài ra, người ta có thể tách các gói phần mềm đó có chức năng sai:

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 

Cuối cùng, nếu bạn cần cả hai gói và không muốn bận tâm với ::, người ta có thể tải chúng theo thứ tự khác:

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

Tôi đã có một vấn đề tương tự (với một bộ dữ liệu khác nhau, nhưng thông báo lỗi tương tự), nhưng tôi phát hiện ra rằng ddplyr sử dụng cách đánh vần Anh "tóm tắt". Khi tôi đã thực hiện thay đổi chính tả, mã đã hoạt động.

Đây là mã tôi đã sử dụng. Khi tôi sử dụng chính tả "z", tôi nhận được thông báo lỗi Error in .fun(piece, ...) : argument "by" is missing, with no default; nhưng thay đổi thành "s" đã giải quyết nó.

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

Điều này đã giúp tôi. Cảm ơn bạn! – GlennFriesen

Các vấn đề liên quan