dplyr: "n में त्रुटि (): फ़ंक्शन को सीधे नहीं कहा जाना चाहिए"


96

मैं dplyr पैकेज में एक उदाहरण को पुन: पेश करने का प्रयास कर रहा हूं लेकिन मुझे यह त्रुटि संदेश मिल रहा है। मैं प्रत्येक संयोजन की आवृत्ति के साथ उत्पादित एक नया कॉलम एन देखने की उम्मीद कर रहा हूं। मैं क्या खो रहा हूँ? मैंने ट्रिपल चेक किया कि पैकेज लोड है।

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

N में त्रुटि (): इस फ़ंक्शन को सीधे नहीं कहा जाना चाहिए

जवाबों:


120

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

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

conflicts()नकाबपोश वस्तुओं को देखने के परिणामों को देखें।


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

16
जैसा कि @ User1257894 कहता है, summarizeपैकेज के साथ प्रयोग करें , कुछ इस तरह से dplyr::summarize(count = n())
राफा बैरागन

39

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

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

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

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

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

26

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

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

8

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

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

0

उल्लिखित ब्लॉग के अनुसार कोड निष्पादित करते समय समान समस्या का सामना करना पड़ा और फिर detach ("पैकेज: plyr", अनलोड = TRUE) में समाधान चलाएं

ब्लॉग: https://www.analyticsvidhya.com/blog/2017/09/comparative-stock-analysis/

Master_Data_AutoCorrelations<-Master_Data_lags %>%
  gather(key = "lag", value = "lag_value", -c(Stock,Date, Close)) %>%
  mutate(lag = str_sub(lag, start = 5) %>% as.numeric) %>%
  group_by(Stock, lag) %>%
  summarize(
    cor = cor(x = Close, y = lag_value, use = "pairwise.complete.obs"),
    cutoff_upper = 2/(n())^0.5,
    cutoff_lower = -2/(n())^0.5
  )

पोस्ट रनिंग डिटैच, जब उपरोक्त कोड फिर से चालू हो गया तो यह ठीक काम किया, हालांकि नीचे दिए अनुसार चेतावनी संदेश मिला, यह सुनिश्चित नहीं था कि प्लायर अनलोड हुआ या नहीं। और कोड को सही तरीके से कैसे निष्पादित किया गया है?

चेतावनी संदेश: 'plyr' नामस्थान को अनलोड नहीं किया जा सकता है: नामस्थान 'plyr' को 'reshape2', 'scales', 'broom', 'ggplot2' द्वारा आयात किया जाता है, इसलिए इसे अनप्लग नहीं किया जा सकता


0

मेरे लिए समाधान detach()फ़ंक्शन था मैंने पैकेज का उपयोग किया


क्या आप स्पष्ट कर सकते हैं कि "मैं उस फ़ंक्शन डाउन पैकेज का उपयोग करता हूं" से आपका क्या मतलब है?
बेनामी कायर

1
: ( "knitr पैकेज", अनलोड = TRUE) खेद मैं समारोह अलग करें () एक पैकेज नीचे, मैं संघर्ष किया था के बीच संकुल dplyr और फिर knitr नीचे पैकेज अलग के लिए समारोह का उपयोग के लिए इस्तेमाल किया
कैमिलो लोपेज
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.