2017-06-23 28 views
12

प्रस्तावनाdplyr 0.7.0 संकुल

मैं सामान्य रूप से मेरे संकुल में dplyr प्रयोग tidyeval। 0.7.0 से पहले, मैं R CMD CHECK के दौरान नोट्स से बचने के लिए dplyr क्रियाओं के अंडरस्कोर संस्करणों का उपयोग कर रहा था। उदाहरण के लिए, कोड:

x <- tibble::tibble(v = 1:3, w = 2) 
y <- dplyr::filter(x, v > w) 

R CMD CHECK नोट झुकेंगे होगा:

* checking R code for possible problems ... NOTE 
no visible binding for global variable ‘v’ 

तुलना करके, मानक मूल्यांकन संस्करण का उपयोग कर:

y <- dplyr::filter_(x, ~v > w) 

ऐसी कोई नोट मिले।

हालांकि, dplyr 0.7.0 में, शब्दचित्र Programming with dplyr का कहना है कि (नोट्स से बचने के लिए) संकुल में dplyr कार्यों सहित के लिए उपयुक्त वाक्य रचना है:

y <- dplyr::filter(x, .data$v > .data$w) 

नतीजतन, news file कहना है कि "प्रत्येक मुख्य की रेखांकित संस्करण क्रिया की अब आवश्यकता नहीं है, और इसलिए इन कार्यों को हटा दिया गया है (लेकिन पिछड़े संगतता के लिए चारों ओर रहते हैं)। "

प्रश्न

शब्दचित्र का कहना है कि इसके बाद के संस्करण नई वाक्य रचना R CMD check नोट उत्पन्न नहीं करेंगे, "बशर्ते कि आप भी @importFrom rlang .data साथ rlang::.data आयात कर लिया।" हालांकि, जब मैं कोड चलाता हूं:

y <- dplyr::filter(x, rlang::.data$v > rlang::.data$w) 
Evaluation error: Object `From` not found in data. 

क्या यह त्रुटि निम्न के जैसा है?

y <- dplyr::filter(x, v == dplyr::n()) 
Evaluation error: This function should not be called directly. 

अर्थात्, कुछ कार्यों के लिए, उन्हें पैकेज के साथ उपसर्गित करने से त्रुटियां उत्पन्न होती हैं? (कुछ या नहीं, वे निर्यात किया गया है के साथ शायद ऐसा करने के लिए,?)

टिप्पणी

एक अलग रूप में, वहाँ में नए वाक्य रचना के साथ लेखन पैकेज के अनुकूल है dplyr कार्यों के एक कम वर्बोज़ तरीका है 0.7.0? विशेष रूप से, dplyr >=0.7.0 के लिए वाक्य रचना:

y <- dplyr::filter(x, .data$v > .data$w) 

dplyr <0.7.0 वाक्य विन्यास की तुलना में अधिक वर्बोज़ है:

y <- dplyr::filter_(x, ~v > w) 

और अधिक चर के रूप में शब्दाडंबर बढ़ जाती है दर्शाया जाता है। हालांकि, मैं अंडरस्कोर संस्करण के साथ कम वर्बोज़ सिंटैक्स का उपयोग नहीं करना चाहता, क्योंकि इसे बहिष्कृत किया गया है।

उत्तर

3

कुछ फ़ंक्शंस के लिए, उन्हें पैकेज के साथ प्रीफ़िक्स्ड कॉल करने से त्रुटियां उत्पन्न होती हैं?

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

0.7.0 में नए वाक्यविन्यास के साथ पैकेज-अनुकूल dplyr कार्यों को लिखने का एक कम वर्बोज़ तरीका है?

विकल्प आपके सभी कॉलम प्रतीकों को आर, उदाहरण के लिए घोषित करना है। अपने पैकेज में कहीं globalVariables(c("v", "w")) कथन के भीतर।

आदर्श रूप से, आर को एनएसई कार्यों के बारे में पता होना चाहिए और उन मामलों में अज्ञात प्रतीकों के लिए कभी भी चेतावनी नहीं देना चाहिए।

+0

धन्यवाद। क्या मुझे इस मुद्दे को 'dplyr' या' rlang' के अंतर्गत दर्ज करना चाहिए? – AJP123

+0

आप dplyr पर फ़ाइल कर सकते हैं कृपया – lionel

+0

सब कुछ किया गया। https://github.com/tidyverse/dplyr/issues/2930 – AJP123

2

एक और काम के आसपास

v <- NULL; # mark as not an unbound global reference 

जैसे सिर्फ अपने भाव कि क्रैन चेकों पैदा कर रहे हैं ऊपर लाइनों को जोड़ने के लिए है। यह कम सटीक नहीं है (कॉलम नाम वास्तव में वैश्विक चर नहीं हैं) और कुछ हद तक सीमित दायरा है।