त्रुटि: फ़ंक्शन "%>%" नहीं मिल सका


80

मैं R में एक उदाहरण चला रहा हूं, चरणों से गुजर रहा हूं और इस कोड को छोड़कर अब तक सब कुछ काम कर रहा है:

 words <- dtm %>%
 as.matrix %>%
 colnames %>%
 (function(x) x[nchar(x) < 20])

त्रुटि: फ़ंक्शन "%>%" नहीं मिल सका

मुझे समझ नहीं आ रहा है कि इस विशेष ऑपरेटर का उपयोग करने का क्या लाभ %>%है, और कोई भी प्रतिक्रिया बहुत अच्छी होगी।



मुझे प्रतिक्रियाओं के आधार पर असंगत परिणाम मिल रहे हैं। यह 10 में से 8 बार असफल हो रहा है लेकिन फिर ठीक चल रहा है।
शॉन

जवाबों:


128

आपको एक पैकेज (जैसे magrittrया dplyr) लोड करने की आवश्यकता है जो पहले फ़ंक्शन को परिभाषित करता है, फिर उसे काम करना चाहिए।

install.packages("magrittr") # package installations are only needed the first time you use it
install.packages("dplyr")    # alternative installation of the %>%
library(magrittr) # needs to be run every time you start R and want to use %>%
library(dplyr)    # alternatively, this also loads %>%

पाइप ऑपरेटर %>%को "विकास के समय को कम करने और कोड की पठनीयता और स्थिरता को सुधारने" के लिए पेश किया गया था

लेकिन हर किसी को खुद के लिए फैसला करना होगा अगर यह वास्तव में अपने वर्कफ़्लो को फिट करता है और चीजों को आसान बनाता है। अधिक जानकारी के लिए magrittr, यहां क्लिक करें

पाइप का उपयोग नहीं करने पर %>%, यह कोड आपके कोड के समान ही वापस आ जाएगा:

words <- colnames(as.matrix(dtm))
words <- words[nchar(words) < 20]
words

संपादित करें: (मैं @Molx द्वारा की गई एक बहुत ही उपयोगी टिप्पणी के कारण अपना जवाब दे रहा हूं)

से होने के बावजूद magrittr, पाइप ऑपरेटर को आमतौर पर पैकेज dplyr(जिसकी आवश्यकता होती है और लोड होता है magrittr) के साथ अधिक उपयोग किया जाता है , इसलिए जब भी आप किसी का उपयोग करके देखें %>%कि आप dplyr इसके बजाय लोड करना चाहते हैं।


क्या आपका मतलब यह है कि ऊपर लिखा कोड%>% का उपयोग करने की आवश्यकता के बिना अलग-अलग तरीके से लिखा जा सकता है
हैदर

9
से होने के बावजूद magrittr, पाइप ऑपरेटर को आमतौर पर पैकेज dplyr(जिसकी आवश्यकता होती है और लोड होता है magrittr) के साथ अधिक उपयोग किया जाता है , इसलिए जब भी आप किसी का उपयोग करके देखें %>%कि आप dplyrइसके बजाय लोड करना चाहते हैं।
मोलक्स

1
मैं तनाव देना चाहूंगा कि केवल Tidyverse ( library(tidyverse)) को लोड करना पर्याप्त नहीं होगा। मैंने ( library(dplyr)) के बाद जोड़ा है library(tidyverse)और तब %>%पाया गया था।
रिक्

15

विंडोज पर: यदि आप% dopar% लूप के अंदर%>% का उपयोग करते हैं, तो आपको लोड पैकेज dplyr(या magrittr, जो dplyrलोड होता है) के लिए एक संदर्भ जोड़ना होगा ।

उदाहरण:

plots <- foreach(myInput=iterators::iter(plotCount), .packages=c("RODBC", "dplyr")) %dopar%
{
    return(getPlot(myInput))
}

यदि आप .packagesकमांड को छोड़ देते हैं , और %do%इसके बजाय इसे एक ही प्रक्रिया में चलाने के लिए उपयोग करते हैं, तो ठीक काम करता है। कारण यह है कि यह सब एक प्रक्रिया में चलता है, इसलिए इसे विशेष रूप से नए पैकेज लोड करने की आवश्यकता नहीं है।


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

मुझे यकीन नहीं है कि अगर यह भी इस पर प्रकाश डालने के लिए सही जगह है, लेकिन मैंने पुनरावृत्ति पैकेज के आधार पर सुझाव दिया है और संपादित करें जो कि फॉरेस्ट लूप को सरल करता है। यह अनुचित होने पर अवहेलना करें।
माइकल बार्टन

1
धन्यवाद। मुझे बचाया। मुझे इस बात का कोई अंदाजा नहीं था कि मुझे इसमें निर्भरता घोषित करने की जरूरत है foreach
जिम जी।

0

निम्नलिखित का उपयोग किया जा सकता है:

 install.packages("data.table")
 library(data.table)

गलत उत्तर imho - यह फ़ंक्शन "%>%" को परिभाषित नहीं करता है । इन दो पंक्तियों को जोड़ने पर, मुझे अभी भी वही मिलता है:could not find function "%>%"
tchevrier

0

लाभ यह है कि पिछले फ़ंक्शन के आउटपुट का उपयोग किया जाता है। उदाहरण के लिए, डेटा स्रोत कहाँ से आता है, आपको दोहराने की आवश्यकता नहीं है।


कृपया इसे टिप्पणी के रूप में रखें। धन्यवाद।
जेस
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.