Подтвердить что ты не робот

Сокращение "коллапса" в пасте?

Используя команду paste в R, я хотел использовать оба аргумента sep и collapse, но вы не можете сокращать collapse до coll или даже collaps. Тем не менее для других функций работает частичная аббревиатура.

Других аргументов для развала, которые начинаются с coll, которые будут мешать сопоставлению частичных аргументов, нет.

Почему я должен набирать имя всего аргумента при вызове paste, когда мне не нужно выполнять другие функции?

4b9b3361

Ответ 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"