textuales texto suspensivos son puntos para oraciones niños los inicio ejemplos cuáles con citas list r ellipsis iterable-unpacking

list - texto - puntos suspensivos ejemplos



Desempaquetando listas de argumentos para puntos suspensivos en R (2)

La sintaxis no es tan hermosa, pero esto hace el truco:

do.call(file.path,as.list(c("/foo/bar",args)))

do.call toma dos argumentos: una función y una lista de argumentos para llamar a esa función con.

Estoy confundido por el uso de puntos suspensivos ( ... ) en algunas funciones, es decir, cómo pasar un objeto que contiene los argumentos como un solo argumento.

En Python se llama "desempaquetar listas de argumentos", por ejemplo

>>> range(3, 6) # normal call with separate arguments [3, 4, 5] >>> args = [3, 6] >>> range(*args) # call with arguments unpacked from a list [3, 4, 5]

En R, por ejemplo, tiene la función file.path(...) que usa puntos suspensivos. Me gustaría tener este comportamiento:

> args <- c(''baz'', ''foob'') > file.path(''/foo/bar/'', args) [1] ''foo/bar/baz/foob''

En cambio, me sale

[1] ''foo/bar/baz'' ''foo/bar/foob''

donde los elementos de args no se "desempaquetan" y se evalúan al mismo tiempo. ¿Hay una R equivalente a Pythons *arg ?


Puede extraer información de los puntos suspensivos al llamar a la list(...) dentro de la función. En este caso, la información en los puntos suspensivos se empaqueta como un objeto de lista. Por ejemplo:

> foo <- function(x,...){ + print(list(...)) + } > foo(1:10,bar = ''bar'',''foobar'') $bar [1] "bar" [[2]] [1] "foobar"

Puede lograr el comportamiento deseado de las funciones vectorizadas como file.path con una llamada a do.call , que a veces es más fácil de usar con el paquete de plyr (en el paquete plyr )

> args <- c(''baz'', ''foob'') > library(plyr) > splat(file.path)(c(''/foo/bar'', args)) [1] "/foo/bar/baz/foob"