如何在 ffdf 中使用 apply 或 sapply 或 lapply?

Posted

技术标签:

【中文标题】如何在 ffdf 中使用 apply 或 sapply 或 lapply?【英文标题】:How to use apply or sapply or lapply with ffdf? 【发布时间】:2014-02-19 15:51:08 【问题描述】:

有没有办法直接对 ffdf 对象的列使用应用类型构造?我正在尝试计算每列中的 NA,而不必将其转换为标准数据框。我可以使用以下方法获取各个列的 na 计数:

sum(is.na(ffdf$columnname))

但是有没有办法一次对数据框中的所有列执行此操作,例如:

lapply(ffdf, function(x)sum(is.na(x)))

当我运行它时,我得到:

$virtual
[1] 0

$physical
[1] 0

$row.names
[1] 0

我无法在 ff 文档中找到特殊版本的 lapply 或 sapply。此外,是否有一种简单的方法可以一次性计算整个 ffdf 的 NA?

【问题讨论】:

【参考方案1】:

ffdf 基本上是一个包含“virtual”、“physical”、“row.names”元素的列表。 如果你在物理元素上做一个 lapply,你就会得到你想要的。

require(ffbase)
myffdf <- as.ffdf(iris)
lapply(physical(myffdf), FUN=function(x) sum(is.na(x)))

由于 is.na 和 sum 是通用的,这将基本上使用 ffbase 包中的 is.na.ffsum.ff,以便根据您的计算机可以处理的内容将数据分块加载到 RAM 中。

【讨论】:

感谢您的快速回复。不过我电脑的硬盘不是很感激!

以上是关于如何在 ffdf 中使用 apply 或 sapply 或 lapply?的主要内容,如果未能解决你的问题,请参考以下文章

如何将 ffdf 转换为 ff

Rff:如何在 ffdf 对象中添加一个依赖于同一行中其他元素的新列?

R语言基础知识|apply函数家族中的兄弟姐妹

ffdf对象列表的序列化

在 R 中访问大型 csv:read.table.ffdf 变慢

加载 ffdf 数据占用大量内存