2015-03-18 4 views
7

मैं @Jim एम के kind help के आधार पर अनुसंधान में एक समारोह बनाया हैआर: एक समारोह के अंदर dplyr का उपयोग करना। eval में अपवाद (expr, माहौल, enclos): अज्ञात स्तंभ

जब मैं समारोह चलाने मैं त्रुटि मिलती है: त्रुटि: अज्ञात स्तंभ 'rawdata' जब डिबगर को देखकर मैं संदेश मिलता है: Rcpp :: eval में अपवाद (expr, माहौल, enclos): अज्ञात स्तंभ 'rawdata'

हालांकि जब मैं पर्यावरण खिड़की को देखो मैं कर सकता हूँ फ़ंक्शन में पास किए गए 2 चर देखें और उनमें 7 स्तर के कारकों के साथ जानकारी कच्चेडाटा और 28 स्तर

012 के साथ रीफडाटा शामिल है
function (refdata, rawdata) 
{ 
    wordlist <- expand.grid(rawdata = rawdata, refdata = refdata,  stringsAsFactors = FALSE) 
    wordlist %>% group_by(rawdata) %>% mutate(match_score =  jarowinkler(rawdata, refdata)) %>% 
summarise(match = match_score[which.max(match_score)], matched_to = ref[which.max(match_score)]) 
} 

उत्तर

9

यह एनएसई (गैर मानक मूल्यांकन) का उपयोग कर कार्यों के साथ समस्या है। एनएसई का उपयोग करने वाले कार्य इंटरैक्टिव प्रोग्रामिंग में बहुत उपयोगी हैं लेकिन विकास में कई समस्याएं पैदा होती हैं यानी जब आप उन कार्यों को अन्य कार्यों के अंदर उपयोग करने का प्रयास करते हैं। अभिव्यक्तियों के कारण सीधे मूल्यांकन नहीं किया जा रहा है, आर वातावरण में वस्तुओं को ढूंढने में सक्षम नहीं है। मैं सुझाव दे सकता हूं कि आप here पढ़ लें और अधिमानतः अधिक जानकारी के लिए स्कोपिंग समस्या अध्याय पढ़ें।

सबसे पहले आपको यह जानने की जरूरत है कि सभी मानक dplyr फ़ंक्शन एनएसई का उपयोग करते हैं। चलो आपकी समस्या का एक अनुमानित उदाहरण देखें:

डाटा:

df <- data.frame(col1 = rep(c('a','b'), each=5), col2 = runif(10)) 


> df 
    col1  col2 
1  a 0.03366446 
2  a 0.46698763 
3  a 0.34114682 
4  a 0.92125387 
5  a 0.94511394 
6  b 0.67241460 
7  b 0.38168131 
8  b 0.91107090 
9  b 0.15342089 
10 b 0.60751868 

देखें कि एनएसई हमारे सरल समस्या क्रश कर देगा करते हैं:

सब सरल इंटरैक्टिव मामले सबसे पहले काम करता है:

df %>% group_by(col1) %>% summarise(count = n()) 

Source: local data frame [2 x 2] 

    col1 count 
1 a  5 
2 b  5 

चलो देखते हैं कि अगर मैं इसे एक फ़ंक्शन में डालता हूं तो क्या होता है:

lets_group <- function(column) { 
    df %>% group_by(column) %>% summarise(count = n()) 
} 

>lets_group(col1) 
Error: index out of bounds 

आपके जैसा ही त्रुटि नहीं है लेकिन यह एनएसई के कारण होता है। वास्तव में फ़ंक्शन के बाहर कोड की एक ही पंक्ति काम करती है।

सौभाग्य से, आपकी समस्या का समाधान है और यह मानक मूल्यांकन है। हैडली ने dplyr में सभी कार्यों के संस्करण भी बनाए जो मानक मूल्यांकन का उपयोग करते हैं। वे अंत में सामान्य कार्य प्लस _ अंडरस्कोर हैं।

अब यह कैसे काम करेगा देखो:

#also notice the quotes around col1 
> lets_group2('col1') 
Source: local data frame [2 x 2] 

    col1 count 
1 a  5 
2 b  5 

मैं आपकी समस्या का परीक्षण नहीं कर सकता लेकिन एनएसई के बजाय एसई का उपयोग कर आप इच्छित परिणाम दे देंगे:

#notice the formula operator (~) at the function at summarise_ 
lets_group2 <- function(column) { 
    df %>% group_by_(column) %>% summarise_(count = ~n()) 
} 

यह निम्नलिखित परिणाम पैदावार । अधिक जानकारी के लिए आप here

भी पढ़ सकते हैं
संबंधित मुद्दे