r之以更快的方式(使用更少的内存)编写 ifelse()

哈哈 阅读:117 2024-07-26 13:47:55 评论:0

目前,我正在研究一个大数据集。在此任务中,我唯一要做的就是预处理数据。

当我运行我的代码时,我看到我的计算机内存通过这一行快速增加:

binary <- ifelse(subset_variables1 == "0", 0, 1) 

该行唯一应该做的就是将我的所有值设为二进制。这可以以更快的方式完成吗?或者这已经是一个好方法(我必须处理内存问题)。

请您参考如下方法:

使用 bool 类型和/或条件时,您可以将它们与数学运算符一起使用,它们将被解释为 10 (对于 TRUEFALSE )。所以+("0" == 0)返回 1 , 和 1 - ("0" == 0)返回 0 .

如果你有这样的向量

set.seed(666) 
subset_variables1 <- sample(c("0", "1"), 10000, replace = TRUE) 

您可以使用 1 - (subset_variables1 == "0")以获得所需的结果。

我将它与评论中的一些建议进行了比较,它是最快的。
library(microbenchmark) 
 
microbenchmark(ifelse = ifelse(subset_variables1 == "0", 0, 1), 
               as.numeric = as.numeric(subset_variables1), 
               if_else = dplyr::if_else(subset_variables1 == "0", 0, 1), 
               plus = 1 - (subset_variables1 == "0"), 
               times = 1000 
) 
 
Unit: microseconds 
       expr     min       lq     mean   median       uq      max neval 
     ifelse 686.668 701.3440 977.0863 910.6570 1170.816 3222.192  1000 
 as.numeric 631.813 642.5910 715.8687 677.3830  720.841 1819.925  1000 
    if_else 347.409 377.0665 537.3344 482.7055  657.468 1603.241  1000 
       plus  97.170  98.8845 129.9091 107.8545  146.303  741.557  1000 


标签:程序员
声明

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

关注我们

一个IT知识分享的公众号