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

ত্রুটি এন (): এই ফাংশনটি সরাসরি কল করা উচিত নয়

উত্তর:


120

আমি অনুমান আপনি dplyrএবং plyrএকই সেশনে লোড করা হয়নি। dplyrনা plyrddplyমধ্যে একটি ফাংশন নয়dplyrপ্যাকেজে ।

উভয় dplyrএবং plyrফাংশন summarise/ summarize

conflicts()মুখোশযুক্ত বস্তুগুলি দেখতে ফলাফলগুলি দেখুন।


31
সমাধানটি হ'ল নিশ্চিত করুন যে আপনি plyrপ্রথমে লোড করেছেন
হ্যাডলি

16
@ ব্যবহারকারী 1257894 যেমন বলেছেন, summarizeপ্যাকেজটি ব্যবহার করুন, এরকম কিছু dplyr::summarize(count = n())
রাফা ব্যারাগান

39

পূর্ববর্তী উত্তর দ্বারা উল্লিখিত হিসাবে, আপনি প্লেয়ার এবং dplyr মধ্যে দ্বন্দ্ব হতে পারে। আপনি প্লাইডার প্যাকেজ আনলোড করতে এই আদেশটি চালাতে পারেন।

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

উল্লিখিত ব্লগ অনুসারে কোড সম্পাদন করার সময় একই ধরণের সমস্যার মুখোমুখি হন এবং তারপরে বিচ্ছিন্নভাবে সমাধান চালান ("প্যাকেজ: প্লেয়ার", আনলোড = সত্য)

ব্লগ: 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
  )

পোস্ট চলমান বিচ্ছিন্নতা, যখন উপরের কোডটি পুনরায় চালু করা হয়েছিল তবে এটি নীচে অনুসারে সতর্কতা বার্তা পেয়েছে ঠিকঠাক হয়ে গেছে, প্লাইারটি আনলোড হয়েছে কিনা তা নিশ্চিত নয় nd এবং কোডটি কীভাবে কার্যকরভাবে কার্যকর করা হয়?

সতর্কতা বার্তা: 'প্লায়ার' নেমস্পেসটি লোড করা যায় না: নেমস্পেস 'প্লাইর' 'পুনরায় আকার 2', 'স্কেল', 'ঝাড়ু', 'জিজিপ্লাট 2' দ্বারা আমদানি করা হয় তাই লোড করা যায় না


0

আমার জন্য সমাধানটি detach()ফাংশন ছিল আমি সেই ফাংশনটি ডাউন প্যাকেজটি ব্যবহার করেছি


"আমি সেই ফাংশনটি ডাউন প্যাকেজটি ব্যবহার করেছি" বলতে কী বোঝাতে চেয়েছেন তা কি আপনি পরিষ্কার করতে পারেন?
বেনামে কাপুরুষ

4
দুঃখিত আমি একটি প্যাকেজ ডাউন করার জন্য ফাংশন ডিটাচ () ব্যবহার করেছি, আমার প্যাকেজ ডিপিপ্লায়ার এবং নাইটারের মধ্যে দ্বন্দ্ব ছিল তারপর ডাউন প্যাকেজ ডিটাচ ("প্যাকেজ: নাইটার", আনলোড = সত্য) জন্য ফাংশনটি ব্যবহার করুন
ক্যামিলো লোপেজ
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.