0

我对省略号用例有疑问。我的函数接受对象列表,我们称它们为“X”类的对象。现在,对象 X 在我的函数内部被处理为“Xs”类,所以我有“Xs”对象的列表。我从其他包导入的函数可以一次计算多个“Xs”对象,但它们必须被枚举(省略机制),而不是作为列表传递。有没有办法解决它?我想要这样的东西

examplefun <- function(charlist){
nums <- lapply(charlist, as.numeric)
sum(... = nums)
}

当然,上面的示例会引发错误,但它显示了我想要实现的目标。我尝试使用 recursive = FALSE 取消列表(“X”和“Xs”是列表本身),但它不起作用。

如果没有解决方案,那么:

假设我决定接受 ... insted 的“X”对象列表。我可以修改省略号元素(将它们更改为“Xs”)然后传递给接受省略号的函数吗?所以它看起来像这样:

examplefun2 <- function(...){
function that modify object in ... to "Xs" objects
sum(...)
}
4

1 回答 1

0

在您的第一个函数中,只需sum直接调用即可,因为它sum适用于数字向量而不是单个数字。

examplefun <- function (charlist) {
    nums <- vapply(charlist, as.numeric, numeric(1L))
    sum(nums)
}

(注意使用 ofvapply代替lapply:sum需要一个原子向量,我们不能传递一个列表。)

在您的第二个函数中,您可以捕获...并使用捕获的变量:

examplefun2 <- function (...) {
    nums <- as.numeric(c(...))
    sums(nums)
}

对于更复杂的参数,Roland 的注释是一个不错的选择:将函数参数修改为列表,并将其传递给do.call.

于 2019-08-19T14:12:08.550 回答