2015-04-19 4 views
5

प्रश्न बहुत सरल है लेकिन मुझे कोई समाधान नहीं मिला।आर: पेस्ट के साथ कॉलम नाम परिभाषित करें()

मैं paste0 के साथ कॉलम के नाम को परिभाषित करने वाला एक नया डेटाफ्रेम बनाना चाहता हूं।

आदर्श रूप में मैं ऐसा कुछ करना चाहता हूं (जो काम नहीं करता है)।

mydataframe <- data.frame(id = 1, 
          paste0('Here_','my_','column_','name') = 'foo') 
# Error: unexpected '=' in: 
# "mydataframe <- data.frame(id = 1, 
#       paste0('Here_','my_','column_','name') =" 

इसके अलावा, क्यों काम नहीं करता है?

+0

यह पूरी तरह स्पष्ट तुम क्या करने की कोशिश कर रहे हैं क्या नहीं है के साथ पेस्ट समारोह के अंदर सभी आदेश डाल के साथ समस्या को हल किया। क्या यह उदाहरण एक एकल डेटा फ्रेम दिखा रहा है, जिसमें एक वैरिएबल है जिसमें एक एकल मान है? –

+2

@BrianP मुझे लगता है कि वह क्या चाहता है वह कॉलम वेक्टर 'foo''' से जुड़े नाम को गतिशील रूप से निर्दिष्ट करने में सक्षम होना है, इसलिए परिणाम मैन्युअल रूप से टाइप करने के बराबर होगा 'data.frame (id = 1, here_my_column_name =' foo ') '। – nrussell

+1

अहह, समझ में आता है! स्पष्टीकरण के लिए Thx –

उत्तर

4

Data.frame एक कार्य है, और इसलिए तर्क लेते हैं। ये तर्क अन्य कार्य नहीं हो सकते हैं। उदाहरण के लिए, आप fn <- function(paste0('Hi_', 'how_are_you') = x) { x } जैसे फ़ंक्शन को परिभाषित नहीं कर सके। आर बस उस तरह से काम नहीं करता है।

हालांकि, अगर आप अभी भी गतिशील रूप से अपने स्तंभ नाम इस तथ्य के बाद बदल सकते हैं:

df <- data.frame(1, 'foo') 
names(df) <- c('id', paste0('Here_','my_','column_','name')) 

कि आप क्या चाहते हैं क्या करना चाहिए।

बोनस: आप अपने पेस्ट को निम्नानुसार सरल बना सकते हैं: paste('Here', 'my', 'column', 'name', sep = '_')

0

आप यह सिर्फ हो जाता है कि वास्तव में आप क्या लिख ​​और स्तंभ के लिए एक नाम के रूप में उपयोग करने के लिए कोशिश कर रहे हैं,

df[, paste('Here', 'my', 'column', 'name', sep = '_')] <- 'foo' 

यह यह करने के लिए आप का सुझाव के रूप में असंभव है क्या कर सकते हैं, क्योंकि कोई चर मूल्यांकन किया जाता है,। इस तरह, paste('Here', 'my', 'column', 'name', sep = '_') का मूल्यांकन किया जाता है और लौटाई गई स्ट्रिंग वास्तव में कॉलम के नाम के रूप में उपयोग की जाती है।

0

मैं कुछ समय पहले ही जरूरत है और मूल्यांकन निम्नलिखित

i=3 
mydf <- eval(parse(text = paste0(
    "data.frame(id =", 1, ", my_col", i, "=", 55, ")"))) 
संबंधित मुद्दे