r argument-matching

Abreviatura de “colapso” en pegar?



argument-matching (2)

Usando el comando paste en R, quise usar ambos argumentos sep y collapse , pero no se puede abreviar collapse para collaps o incluso collaps . Sin embargo, para otras funciones abreviaturas parciales funciona.

No hay otros argumentos para colapsar que comiencen con coll , lo que podría interferir con la coincidencia parcial de argumentos.

¿Por qué debo escribir el nombre completo del argumento al llamar a paste , cuando no tengo que hacerlo para otras funciones?


Creo que es el ... en pegar lo que hace que tenga que usar la coincidencia exacta de argumentos. Específicamente, el hecho de que el ,collapse produce después de ... en la lista de argumentos.

Demostración:

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


Una función de envoltura podría ser útil, al igual que 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.ej :

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