2012-12-05 15 views
17

आर में paste कमांड का उपयोग करके, मैं sep और collapse दोनों तर्कों का उपयोग करना चाहता था, लेकिन आप collapse से coll या यहां तक ​​कि collaps को संक्षिप्त नहीं कर सकते। फिर भी अन्य कार्यों के लिए आंशिक संक्षेप काम करता है।पेस्ट में "पतन" का संक्षिप्त?

coll के साथ शुरू होने वाले पतन के लिए कोई अन्य तर्क नहीं हैं, जो आंशिक तर्क मिलान में हस्तक्षेप करेंगे।

मुझे paste पर कॉल करते समय पूरे तर्क का नाम क्यों टाइप करना चाहिए, जब मुझे अन्य कार्यों के लिए नहीं है?

+4

मैं वास्तव में बहुत संक्षिप्त नाम इस तरह का यह रूप में उपयोग नहीं होता पढ़ने के लिए कठिन है और इसका असुरक्षित परिणाम हो सकते हैं क्योंकि विस्तार गलत पा सकता है रैमर मिलान। –

उत्तर

22

मुझे विश्वास है कि यह पेस्ट में ... है जो आपको सटीक तर्क मिलान का उपयोग करना पड़ता है। विशेष रूप से, ,collapse... तर्क सूची में आता है।

प्रदर्शन:

f1 <- function(x, collapse) cat("collapse",collapse) 
f2 <- function(..., collapse) cat("collapse",collapse) 
f3 <- function(collapse, ...) cat("collapse",collapse) 

> f1(c="test",1) 
collapse test 
> f2(1,c="test") 
Error in base::cat(...) : argument "collapse" is missing, with no default 
> f2(1,collapse="test") 
collapse test 
> f3(c="test",1) 
collapse test 
+1

यह मेरी समझ भी है। आर दस्तावेज़ीकरण में "कहीं कहीं" एक चेतावनी है कि '...' के बाद किसी नामित तर्क को छोटा नहीं किया जा सकता है। –

+7

यह [खंड 4.3.2 तर्क मिलान] में प्रलेखित है [http://cran.r-project.org/doc/manuals/R-lang.html#Argument-matching) [आर भाषा परिभाषा] (http: // cran.r-project.org/doc/manuals/R-lang.html)। –

+1

तो मेरे में हैकर 'मायपेस्ट <-फंक्शन (सीपी = "", पतन = नल, ...) पेस्ट (सीपी, पतन, ...)' :-) –

2

एक आवरण समारोह उपयोगी हो सकता है, ज्यादा paste0

p <- function(..., s=" ", clap=NULL) { # or whichever abbreviation you prefer. I originally had `col`, but that was dumb. 
    paste(..., sep=s, collapse=clap) 
} 

p0 <- function(..., clap=NULL) { 
    paste(..., sep="", collapse=clap) 
} 

तरह जैसे:

p(c("hello", "world"), c("abc", "123"), clap="$") 
# [1] "hello abc$world 123" 


p0(c("hello", "world"), c("abc", "123"), clap="$") 
# [1] "helloabc$world123" 
+0

ओपी के लिए उपयोग किया जा सकता है , मुझे नहीं लगता कि यह वास्तव में प्रश्न का उत्तर देता है * क्यों * संक्षेप काम नहीं करता है, जो एर का जवाब करता है ... – A5C1D2H2I1M1N2O1R2T1

+0

@ करल, सफाई के लिए धन्यवाद। आनंद: मुझे लगता है कि आप सटीकता के बारे में सही हैं, फिर भी यह ओपी के लिए सहायक हो सकता है। मुझे लगता है कि एर ने एक महान काम क्यों किया, इसका जवाब क्यों दिया –

संबंधित मुद्दे