当函数返回NULL时lapply()

时间:2012-01-29 16:10:56

标签: r

当函数没有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输出正在扰乱我的自动化。

5 个答案:

答案 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 因为它的目的是为副作用做一个函数而不返回结果