Сокращение "коллапса" в пасте?
Используя команду paste
в R, я хотел использовать оба аргумента sep
и collapse
, но вы не можете сокращать collapse
до coll
или даже collaps
. Тем не менее для других функций работает частичная аббревиатура.
Других аргументов для развала, которые начинаются с coll
, которые будут мешать сопоставлению частичных аргументов, нет.
Почему я должен набирать имя всего аргумента при вызове paste
, когда мне не нужно выполнять другие функции?
Ответы
Ответ 1
Я считаю, что ...
в пасте, что приводит к тому, что вам нужно использовать точное сопоставление аргументов. В частности, факт, что ,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
Ответ 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"