【问题标题】:What is the substitute idiom for sapply in data.table? [duplicate]data.table 中 sapply 的替代成语是什么? [复制]
【发布时间】:2017-04-23 16:49:19
【问题描述】:

我只想分别计算每一列的最大值。使用简单的sapply 进入内存溢出:

 # dt is my data.table object
 res <- sapply(dt, max, na.rm=T) # fails due to memory problems

它是一个 100 万行和 1000 列的稀疏表,总大小为 11 GB。

我正在处理文件train_date.csv 并使用以下代码行:

require(data.table)
dtDate <- fread(paste0(filePath, "train_date.csv"))
dim(dtDate)
require(pryr)
object_size(dtDate)

【问题讨论】:

  • 您使用的代码到底是什么?数据大小是多少?你的规格是什么?你读过this 吗?有用于lapply 用法的idiom 示例等等。
  • 或许,使用apply(df, 2, max)会更好。
  • 这是一个 1 mio 行和 1000 列的稀疏表,总大小为 11 GB @DavidArenburg。
  • 这不是您运行data.table 代码的方式。你应该阅读我上面链接的介绍
  • mpjdem 的回答遵循了 data.table 常见问题页面的这个建议:cran.r-project.org/web/packages/data.table/vignettes/…

标签: r data.table


【解决方案1】:

警告,将创建一个非常大的表!

dt <- as.data.table(matrix(runif(1000*1000000),ncol=1000))
dt[,lapply(.SD,max)]

【讨论】:

  • 谢谢,但这不起作用。它产生了一个包含 data.frames 的 data.table。
  • 那么您的设置或数据有问题。它应该工作。我在上面包含了一个非常适合我的示例 data.table。
  • 非常感谢。我会去检查我的代码,看看是什么搞砸了。
  • 这如何回答内存溢出问题?
  • 由于某种奇怪的原因,'res
猜你喜欢
  • 2017-11-05
  • 2013-07-26
  • 2021-07-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-03
  • 2023-03-07
  • 1970-01-01
相关资源
最近更新 更多