当函数没有lapply()
时,是否有一种方法可以阻止return()
为列表的每个元素返回NULL值。
这是一个非常基本的例子:
x <- function(x) {
return(NULL) }
a.list <- list(a=1,b=2,c=3)
lapply(a.list, x)
输出结果为:
$a
NULL
$b
NULL
$c
NULL
我的目标是根本没有输出。
更新:我的使用案例如下。我正在使用lapply()
抽出xtable()
文本,我sink()
将其转换为Rnw文件。所以这个NULL输出正在扰乱我的自动化。
答案 0 :(得分:28)
有两种选择:
无论
trash_can <- lapply(a.list, x)
或
invisible(lapply(a.list, x))
第一个问题让我想知道在/dev/null
中是否有类似Linux R
的模拟,您可以使用它来重定向您不想要的内容。创建变量trash_can
的唯一问题是它会挂起并耗尽内存,除非你rm(trash_can)
。但我不认为这是一个问题。
答案 1 :(得分:6)
你做了
R> x <- function(x) { return(NULL) }
R> a.list <- list(a=1,b=2,c=3)
R> res <- lapply(a.list, x)
R> res
$a
NULL
$b
NULL
$c
NULL
R>
正如您要求lapply
扫描列表中的所有元素一样,您很难抱怨res
获取a.list
的所有元素的结果(NULL
}。这是对的。
但是,对R> do.call(rbind, res)
NULL
R>
值的好处是,让它们在下一个聚合步骤中跳过是微不足道的:
NULL
因此,当数据出现问题或出现其他不正常现象时,我主要使用这种方法返回{{1}},因为您可以在以后轻松汇总“好”结果。
答案 2 :(得分:5)
你可以做到
a.list <- a.list[!sapply(a.list, is.null)]
答案 3 :(得分:2)
我想您可能需要查看l_ply
包中的plyr
。它应该不返回任何内容,它具有lapply
的所有属性,还有更多属性。
答案 4 :(得分:0)
这些天我会使用 purrr::walk
因为它的目的是为副作用做一个函数而不返回结果