将```参数传递给lapply

时间:2013-06-13 16:25:09

标签: r arguments lapply

我在编写一个以...作为参数然后在函数体中有lapply(..., length)的函数时遇到问题。

目前,我的代码是(重要的部分在第2行):

paste1 <- function(..., sep = " ", collapse = NULL) {
    if(isTRUE(unique(as.logical(lapply(X = ..., FUN = length)))))
        if(length(sep)) paste(..., sep = sep, collapse = collapse)
        else paste0(..., collapse = collapse)
    else
        ""
}

问题在于lapply(X = ..., FUN = length)部分。如果我在...参数中有多个元素,它会尝试同时将length应用于所有参数,这会引发错误,因为length只有一个参数。

我无法使用lapply(X = as.list(...), FUN = length)之类的内容,因为...的某些元素可能是NULL,而...的列表代表会丢失信息。

我需要做的只是将length应用于...的各个元素而不先强制它们。

1 个答案:

答案 0 :(得分:3)

此版本使用dots <- list(...),此输入似乎没有失败:

> paste1(A = "foo", B = NULL, C = c("bar","foo"))
[1] ""

我没有看过你的功能尝试做什么,也没看过这是否是有效的输入,但是lapply(X = dots, FUN = length)做了你想做的事情而dots <- list(...)保留了NULL

paste1 <- function(..., sep = " ", collapse = NULL) {
    dots <- list(...)
    if(isTRUE(unique(as.logical(lapply(X = dots, FUN = length)))))
        if(length(sep)) paste(dots, sep = sep, collapse = collapse)
        else paste0(dots, collapse = collapse)
    else
        ""
}