2016-08-24 13 views
5

मैं प्रोग्रामेटिक रूप से कॉलम नामों को फ़ंक्शन में पास करने की कोशिश कर रहा हूं ताकि उन्हें dplyr में चुना जा सके। कॉलम नाम अलग-अलग होंगे इसलिए मैंने चयनित फ़ंक्शन select_ के मानक मूल्यांकन संस्करण का उपयोग करने का प्रयास किया है। कॉलम नाम स्वयं थोड़ा मजाकिया हैं क्योंकि उनमें + और - वर्ण हैं, जो मुझे लगता है कि समस्या का कारण बन रहा है। नीचे एक साधारण उदाहरण है जो त्रुटि को दोहराता है।मूल्यांकन के बिना dplyr में कॉलम नामों को कैसे पास किया जाए

library(tibble) 
library(dplyr) 
data <- data_frame(target_id = 'xyz', 
        `CH4+Sulfate-1` = 1.2, 
        `CH4+Sulfate-2` = 2, 
        `CH4+Sulfate-3` = 3) 
columns <- c('CH4+Sulfate-1', 'CH4+Sulfate-2', 'CH4+Sulfate-3') 
select_(data, .dots = columns) 

मैं निम्न त्रुटि

Error in eval(expr, envir, enclos) : object 'CH4' not found 

कौन सा मुझे विश्वास है कि नाम के बजाय का मूल्यांकन स्ट्रिंग के रूप में उठाए जा रहे हैं मिलता है। तालिका के कॉलम का नाम बदलने के बिना मैं इस समस्या को कैसे प्राप्त कर सकता हूं?

+1

हमम .... अच्छा सवाल - आधार आर से 'डेटा [कॉलम]' ठीक है, इसलिए यह एक सार्वभौमिक मुद्दा नहीं है। आप 'dplyr :: चयन (डेटा, मिलान (कॉलम, नाम (डेटा)) के साथ इसके आसपास भी हैक कर सकते हैं) 'लेकिन मुझे अन्यथा कोई जानकारी नहीं है। – thelatemail

+2

एक बिल्कुल न्यूनतम उदाहरण इसे तोड़ने के लिए पर्याप्त है - 'डेटा <- data.frame (\' ए + बी \ '= 1: 3, check.names = FALSE); select_ (डेटा, "ए + बी") ' – thelatemail

+0

ऐसा लगता है कि' select_ 'के साथ 'one_of' इन [स्थितियों के प्रकार] में उत्तर हो सकता है (http://stackoverflow.com/questions/35839408/r-dplyr- ड्रॉप-एकाधिक-कॉलम/35839679 # 35839679): 'चुनें (डेटा, एक_ओफ़ (कॉलम)) ' – aosmith

उत्तर

2

बैकटीक्स में नाम लपेटना नौकरी करता है।

columns <- c('`CH4+Sulfate-1`', '`CH4+Sulfate-2`', '`CH4+Sulfate-3`') 
संबंधित मुद्दे