【发布时间】:2013-06-13 16:25:08
【问题描述】:
我在编写一个将... 作为参数并在函数体中包含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 应用于... 的各个元素,而不是先强制它们。
【问题讨论】:
-
使用
list代替as.list? -
你能展示一个输入/使用的例子吗?如果我执行
dots <- list(...)然后lapply(dots, length),我无法重现您的问题。 -
谢谢,我不知道
list与as.list不同。 -
@JonClaus 我什至没有看到
as.list(...)甚至可以工作 - 对我来说失败了。 -
你的意思是它抛出了一个错误还是它没有按预期工作?它似乎对我有用(意味着它不会引发错误),但我没有对其进行太多测试,因为我已经知道它在某些情况下会失败。