18

Rでコマンドを使用して、引数と、のpaste両方を使用したかったのですが、省略したり、またはを省略したりすることはできません。しかし、他の機能については、部分的な省略形が機能します。sepcollapsecollapsecollcollaps

例えば:

paste(letters, colla=", ")
# [1] "a , " "b , " "c , " "d , " "e , " "f , " "g , " "h , " "i , " "j , " "k , " "l , " "m , " "n , " "o , " "p , " "q , " "r , "
[19] "s , " "t , " "u , " "v , " "w , " "x , " "y , " "z , "
paste(letters, collapse=", ")
# [1] "a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z"

で始まる折りたたみ式の引数は他にありませんcoll。これは、部分的な引数の一致を妨げる可能性があります。

paste他の関数を呼び出す必要がないのに、呼び出すときに引数名全体を入力する必要があるのはなぜですか?

4

2 に答える 2

23

...正確な引数の一致を使用する必要があるのは、インペーストだと思います。具体的には、引数リストの の,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
于 2012-12-05T13:46:21.573 に答える
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"
于 2012-12-05T18:47:10.457 に答える