如何将list()转换为R中的省略号?

时间:2016-05-09 14:24:28

标签: r

假设我有两个函数使用三个点构造作为参数。

我想检索第一个函数的省略号,并为第二个函数创建一个全新的参数列表。

如何将新创建的列表传递给第二个函数?

以下是示例代码:

first.function <- function(..., name) {
  argument.list <- list(...)

  new.args <- list()
  for (i in 1:length(argument.list)) {
    new.args[[i]] <- argument.list[[i]]^2
  }
  new.args[[length(new.args) + 1]] <- name

  do.call(second.function, new.args)
}

second.function <- function(..., name) {
  print(paste("This is the name:", name))
  print(paste("These are the arguments:", ...))
}

first.function(1, 2, 3, name = "Test")

我尝试使用do.call,但是有一条错误消息:

  

粘贴错误(&#34;这是名称:&#34;,名称):参数&#34;名称&#34;是   缺少,没有默认

这是因为第二个函数不能将name参数识别为省略号参数中的单独参数。

预期结果是:

  

这是名称:测试

     

这些是参数:1,4,9

1 个答案:

答案 0 :(得分:9)

只需为参数命名:

first.function <- function(..., name) {
  argument.list <- list(...)

  new.args <- lapply(argument.list, `^`, 2) 
  new.args[["name"]] <- name

  do.call(second.function, new.args)
}

first.function(1, 2, 3, name = "Test")
#[1] "This is the name: Test"
#[1] "These are the arguments: 1 4 9"

以下是语言定义相关部分的链接:4.3.2 Argument matching