2010-05-02 11 views
29

मैं एक एकल चर उत्पन्न करने की कोशिश कर रहा हूं जो दो वर्णों का एक संयोजन है उदाहरण के लिए "p30s4" "p28s4" से "p30s4 p28s4" तक जाना है। जैसा कि नीचे दिखाया गया है मैंने बिल्ली और पेस्ट की कोशिश की है। दोनों रिक्त चर लौटते हैं। मैं क्या गलत कर रहा हूं?आर: मैं एक वेक्टर को कैसे जोड़ सकता हूं?

> blah = c("p30s4","p28s4") 
> blah 
[1] "p30s4" "p28s4" 

> foo = cat(blah) 
p30s4 p28s4 
> foo 
NULL 

> foo = paste(cat(blah)) 
p30s4 p28s4 
> foo 
character(0) 
+0

आप एक वेक्टर को जोड़ रहे हैं, शायद सवाल बदलना चाहते हैं, लेकिन जवाब सही है फिर भी – Dan

उत्तर

52

उपयोग करके देखें:

> paste(blah, collapse = "") 
[1] "p30s4p28s4" 

या आप के बीच में अंतरिक्ष चाहते हैं:

> paste(blah, collapse = " ") 
[1] "p30s4 p28s4" 
10

पेस्ट के 'पतन' तर्क (करने के लिए एक विकल्प), कर उपयोग करने के लिए है वेक्टर में तर्क के रूप में प्रत्येक मान को पार करने के लिए .call()।

do.call(paste,as.list(blah)) 

लाभ यह है कि यह दृष्टिकोण 'पेस्ट' के अलावा अन्य कार्यों के लिए सामान्यीकृत है।

+0

'as.list (blah) 'मेरे लिए चाल है –

2

इस प्रश्न का उत्तर महान है, और मेरे मुकाबले बहुत आसान है - इसलिए मैंने बाद में 'पतन' के उपयोग को अपनाया है।

हालांकि, विचार को बढ़ावा देने के कि जब संदेह में, आप अपने खुद के समारोह में लिख सकते हैं, मैं अपने पिछले है, कम सुरुचिपूर्ण समाधान प्रस्तुत करते हैं:

vecpaste <- function (x) { 
    y <- x[1] 
    if (length(x) > 1) { 
     for (i in 2:length(x)) { 
      history 
      y <- paste(y, x[i], sep = "") 
     } 
    } 
    #y <- paste(y, "'", sep = "") 
    y 
} 

vecpaste(blah) 

आप भी उद्धरण और अल्पविराम जोड़ने के लिए या सिर्फ कुछ के बारे में कर सकते हैं

vecpaste <- function (x) { 
y <- paste("'", x[1], sep = "") 
if (length(x) > 1) { 
    for (i in 2:length(x)) { 
     history 
     y <- paste(y, x[i], sep = "") 
    } 
} 
y <- paste(y, "'", sep = "") 
y 
} 
1

cat के आपके उपयोग के साथ समस्या यह है कि cat(x) उत्पादन के लिए x लिखते हैं, एक चर के लिए नहीं ऊपर है: - इस मूल संस्करण है कि मैंने लिखा है। यदि आप एक स्ट्रिंग के लिए लिखना चाहते थे, तो आप कर सकता है:

capture.output(cat(blah)) 

जो के रूप में नाम का तात्पर्य, एक स्ट्रिंग में उत्पादन कब्जा वांछित परिणाम वापस जाने के लिए। हालांकि, यह पसंदीदा विधि है, केवल एक वैकल्पिक समाधान के माध्यम से एक स्पष्टीकरण है।