List 解包R中省略号的参数列表
我对在某些函数中使用省略号(List 解包R中省略号的参数列表,list,r,ellipsis,iterable-unpacking,List,R,Ellipsis,Iterable Unpacking,我对在某些函数中使用省略号(…)感到困惑,即如何将包含参数的对象作为单个参数传递 在Python中,它被称为“解包参数列表”,例如 例如,在R中,函数file.path(…)使用省略号。我希望有这样的行为: > args <- c('baz', 'foob') > file.path('/foo/bar/', args) [1] 'foo/bar/baz/foob' 其中,args的元素不是“解包”的,而是同时评估的。是否存在与Pythons*arg等效的R?您可以通过在函
…
)感到困惑,即如何将包含参数的对象作为单个参数传递
在Python中,它被称为“解包参数列表”,例如
例如,在R中,函数file.path(…)
使用省略号。我希望有这样的行为:
> args <- c('baz', 'foob')
> file.path('/foo/bar/', args)
[1] 'foo/bar/baz/foob'
其中,
args
的元素不是“解包”的,而是同时评估的。是否存在与Pythons*arg
等效的R?您可以通过在函数中调用列表(…)
从省略号中提取信息。在本例中,省略号中的信息打包为列表对象。例如:
> foo <- function(x,...){
+ print(list(...))
+ }
> foo(1:10,bar = 'bar','foobar')
$bar
[1] "bar"
[[2]]
[1] "foobar"
语法没有那么漂亮,但这确实起到了作用:
do.call(file.path,as.list(c("/foo/bar",args)))
do.call
接受两个参数:一个函数和一组用于调用该函数的参数 我花了一段时间才找到它,但是这个包有一个等价物:它被称为
名称中的“dl”代表“要列出的点”,因为它是一系列lift_xy
函数的一部分,可用于将函数域从一种输入“提升”到另一种输入,这些“种类”是列表、向量和“点”
由于lift\u dl
可能是其中最有用的,因此为其提供了一个简单的lift
别名
要重用上述示例,请执行以下操作:
> library(purrr)
> args <- c('baz', 'foob')
> lift(file.path)(c('/foo/bar', args))
[1] "/foo/bar/baz/foob"
>库(purrr)
>args lift(file.path)(c('/foo/bar',args))
[1] “/foo/bar/baz/foob”
关于此技术的扩展讨论:
> args <- c('baz', 'foob')
> library(plyr)
> splat(file.path)(c('/foo/bar', args))
[1] "/foo/bar/baz/foob"
do.call(file.path,as.list(c("/foo/bar",args)))
> library(purrr)
> args <- c('baz', 'foob')
> lift(file.path)(c('/foo/bar', args))
[1] "/foo/bar/baz/foob"