我在编写一个以...
作为参数然后在函数体中有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
应用于...
的各个元素而不先强制它们。
答案 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
""
}