gpt4 book ai didi

r - 在 R 中更新数据集的最快方法是什么?

转载 作者:行者123 更新时间:2023-12-02 08:17:46 24 4
gpt4 key购买 nike

我有一个 20000 * 5 的数据集。目前它正在以迭代方式处理,并且数据集在每次迭代中不断更新。

data.frame 中的单元格在每次迭代时都会更新,并寻求一些帮助以更快地运行这些东西。由于这是一个小的 data.frame,我不确定 data.table 是否可以正常工作。

以下是 data.frame 子分配的基准:

sessionInfo()
R version 3.2.4 Revised (2016-03-16 r70336)
Platform: x86_64-w64-mingw32/x64 (64-bit)
Running under: Windows Server >= 2012 x64 (build 9200)
set.seed(1234)
test <- data.frame(A = rep(LETTERS , 800), B = rep(1:26, 800), C=runif(20800), D=runif(20800) , E =rnorm(20800))
microbenchmark::microbenchmark(test[765,"C"] <- test[765,"C"] + 25)
Unit: microseconds
expr min lq mean median uq max neval
test[765, "C"] <- test[765, "C"] + 25 112.306 130.8485 979.4584 186.3025 197.7565 44556.15 100}

有没有比我发的更快的实现上述功能的方法?

最佳答案

有趣的是,如果您使用的是 data.table,乍一看似乎并没有更快。也许在循环内使用赋值会变得更快。

library(data.table)
library(microbenchmark)
dt <- data.table(test)

# Accessing the entry
dt[765, "C", with = FALSE]

# Replacing the value with the new one
# Basic data.table syntax
dt[i =765, C := C + 25 ]

# Replacing the value with the new one
# using set() from data.table
set(dt, i = 765L, j = "C", value = dt[765L,C] + 25)

microbenchmark(
a = set(dt, i = 765L, j = "C", value = dt[765L,C] + 25)
, b = dt[i =765, C := C + 25 ]
, c = test[765, "C"] <- test[765, "C"] + 25
, times = 1000
)

微基准测试的结果:

                                                   expr     min      lq     mean  median       uq      max neval
a = set(dt, i = 765L, j = "C", value = dt[765L, C] + 25) 236.357 46.621 266.4188 250.847 260.2050 572.630 1000
b = dt[i = 765, `:=`(C, C + 25)] 333.556 345.329 375.8690 351.668 362.6860 1603.482 1000
c = test[765, "C"] <- test[765, "C"] + 25 73.051 81.805 129.1665 84.220 87.6915 1749.281 1000

关于r - 在 R 中更新数据集的最快方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40375094/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com