2012-12-05 81 views
17

使用R中的命令paste,我想使用參數sepcollapse,但不能將collapse縮寫爲coll或甚至collaps。而其他功能的部分縮寫工作。粘貼中「collapse」的縮寫?

沒有其他參數要以coll開頭,這會干擾部分參數匹配。

爲什麼我必須在撥打paste時輸入整個參數名稱,當我不需要其他功能?

+4

我真的真的不使用這種縮寫,因爲它由於擴張可能導致錯誤的結果,所以更難以閱讀並且可能產生不可預期的後果rameter匹配。 –

回答

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

這也是我的理解。在R文檔中有一個「某處」的警告,指出在'...'後面的任何命名參數不能被縮短。 –

+7

[R語言定義](http://cran.r-project.org/doc/manuals/R-lang.html#Argument-matching)的[參見4.3.2參數匹配](http:// cran.r-project.org/doc/manuals/R-lang.html)。 –

+1

所以我的黑客建議'mypaste <-function(sep =「」,collapse = NULL,...)粘貼(sep,collapse,...)':-) –

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

雖然這可能對OP有用,我不認爲它真的回答了爲什麼*這個縮寫不起作用,Ari的答案是...... – A5C1D2H2I1M1N2O1R2T1

+0

@Carl,謝謝你的清理。阿南達:我認爲你是正確的,但這對OP還是有幫助的。我認爲阿里做了很好的工作來回答這個問題 –