【发布时间】:2016-08-24 21:08:43
【问题描述】:
我正在优化被多次调用的 R 代码,发现以下两个命令消耗的时间最多:
dataset <- dataset[which(dataset$responder==T),]
for (i in 1:ncol(dataset))
if (is.factor(dataset[,i]))
dataset[,i] <- dataset[,i][drop=T]
我尝试谷歌搜索,看看是否有办法优化这些,但没有找到任何东西。有没有办法改进这些线路,或者这只是尽可能快?理想情况下,解决方案不应要求编译或使代码不可读。
【问题讨论】:
-
dataset[dataset$responder,]不会比dataset[which(dataset$responder==T),]快吗? -
@BenBolker:谢谢你的建议。看起来 which() 是一个非常优化的函数。做一些模拟,我得到平均 114 毫秒 which() 和平均 110 毫秒,直接使用逻辑向量。中位数从 87 提高到 77。但是,当使用您的建议时,用户必须确保数据集中没有 NA,因为它们会在输出中产生 NA 行。
-
@BenBolker: isTRUE 是相同(TRUE, x) 的缩写,不应在这种情况下使用,因为如果向量的长度大于 1,它将始终返回 FALSE。
标签: r optimization