-1

我在编写一个...作为参数然后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到各个元素,...而不是先强制它们。

4

1 回答 1

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
        ""
}
于 2013-06-13T16:35:22.773 回答