2014-04-02 7 views
75

मैं dplyr पैकेज में उदाहरणों में से एक उदाहरण को पुन: उत्पन्न करने का प्रयास कर रहा हूं लेकिन यह त्रुटि संदेश। मैं प्रत्येक संयोजन की आवृत्ति के साथ उत्पादित एक नया स्तंभ एन देखने की उम्मीद कर रहा हूं। क्या कोई मुझे बता सकता है कि मुझे क्या याद आ रही है? मैंने तीन बार जांच की कि पैकेज लोड हो गया है। हमेशा के रूप में मदद के लिए धन्यवाद।dplyr: "n() में त्रुटि: फ़ंक्शन को सीधे नहीं कहा जाना चाहिए"

library(dplyr) 
# summarise peels off a single layer of grouping 
by_vs_am <- group_by(mtcars, vs, am) 

by_vs <- summarise(by_vs_am, n = n()) 

#Error in n() : This function should not be called directly 

उत्तर

97

मुझे लगता है आप dplyr और plyr एक ही सत्र में भरी हुई है। dplyrplyr नहीं है। ddplydplyr पैकेज में कोई फ़ंक्शन नहीं है।

dplyr और plyr दोनों में summarise/summarize कार्य हैं।

मुखौटा वस्तुओं को देखने के लिए conflicts() के परिणाम देखें।

+26

समाधान सुनिश्चित करें कि आप लोड करने के लिए है 'plyr' पहले – hadley

+8

के रूप में @ User1257894 कहते हैं, का उपयोग' पैकेज के साथ summarize', इस 'dplyr की तरह कुछ :: संक्षेप में प्रस्तुत (गिनती = n())'। –

26

पिछले उत्तर के अनुसार, आप प्लीयर और dplyr के बीच एक संघर्ष हो सकता है। आप plyr पैकेज को उतारने के लिए इस कमांड को चलाने के लिए चला सकते हैं।

detach("package:plyr", unload=TRUE) 

फिर आप उम्मीद के अनुसार जारी रख सकते हैं।

library(dplyr) 
... 
summarise(n = n()) 
+0

बिल्कुल ... संघर्ष संक्षेप में या संक्षेप में था। मैंने अपनी परियोजना में से एक में गलती से 'प्लीयर' और 'dplyr' पैकेज लोड किए और इस संघर्ष को महसूस किया। अच्छा काम साथी। –

21

मास्किंग कार्यों के साथ भ्रम से बचने के लिए, यह नीचे दिए गए उदाहरण की तरह, "पैकेज :: समारोह" विनिर्देश उपयोग करने के लिए स्पष्ट है:

delay <- dplyr::summarise(by_tailnum, 
    count = n(), 
    dist = mean(distance, na.rm = TRUE), 
    delay = mean(arr_delay, na.rm = TRUE)) 
+0

अच्छा कामकाज! –

4

अन्य मामले में, इस त्रुटि के लिए निम्न कोड में हुई ।

library(dplyr) # dplyr 0.5.0 
library(lazyeval) 

df <- data_frame(group = c(1, 2, 2, 3, 3, 3)) 

g <- "group" 

df %>% 
    group_by_(g) %>% 
    summarise_(
    n = n(), 
    sum = interp(~sum(col, na.rm = TRUE), col = as.name(g)) 
) 
# Error in n() : This function should not be called directly 

इसे निम्नानुसार हल किया जा सकता है।

df %>% 
    group_by_(g) %>% 
    summarise_(
    n = "n()", 
    sum = interp(~sum(col, na.rm = TRUE), col = as.name(g)) 
) 
# A tibble: 3 × 3 
# group  n sum 
# <dbl> <int> <dbl> 
# 1  1  1  1 
# 2  2  2  4 
# 3  3  3  9 
संबंधित मुद्दे