r - R;对于百万向量的循环太慢了
问题描述
我正在使用数据表进行管理。我有 13 * 2598893 数据表,我正在尝试使用基于另一列计算的字符填充新列。所以我制作了一个函数,并将其应用于具有数百万行的“for in”循环。它需要永远!我等了几分钟,我无法将它与系统故障区分开来。
我只尝试了 10 行,循环和函数运行得很快。但是当我将它扩展到其他行时,它又需要永远。
str(eco)
'data.frame': 2598893 obs. of 13 variables:
制作这样的功能
check<-function(x){
if(x<=15){
return(1)
}
else{
return(0)
}
}
并应用这样的循环。
for(x in c(1:nrow(eco))){eco[x,13]<-check(eco[x,4])}
它继续并继续工作。
我怎样才能缩短这项工作?或者这只是我应该忍受的 R 的极限?
解决方案
您可能应该尝试矢量化您的操作(注意:for
在 R 中经常可以避免循环)。此外,您可以查看该data.table
软件包以进一步提高效率:
library(data.table)
set.seed(1)
## create data.table
eco <- as.data.table(matrix(sample(1:100, 13 * 2598893, replace = TRUE), ncol = 13))
## update column
system.time(
set(eco, j = 13L, value = 1 * (eco[[4]] <= 15))
)
#> user system elapsed
#> 0.018 0.016 0.033
eco
#> V1 V2 V3 V4 V5 V6 V7 V8 V9 V10 V11 V12 V13
#> 1: 68 74 55 62 82 51 42 18 16 12 50 73 0
#> 2: 39 97 53 61 21 25 79 71 85 19 54 30 0
#> 3: 1 89 62 42 5 90 33 77 31 1 59 26 0
#> 4: 34 22 27 4 36 74 65 45 46 67 74 34 1
#> 5: 87 57 88 4 42 26 9 13 64 32 16 15 1
#> ---
#> 2598889: 91 59 78 28 98 98 13 87 88 46 66 85 0
#> 2598890: 82 60 87 60 49 25 10 9 97 78 61 91 0
#> 2598891: 19 2 100 75 66 88 12 46 94 32 69 56 0
#> 2598892: 18 47 22 87 23 79 56 99 13 29 15 46 0
#> 2598893: 47 30 8 8 9 80 49 78 20 43 86 11 1
推荐阅读
- amazon-web-services - 无法将 google Dns 确认 Txt 记录添加到 Godaddy 的名称服务器
- .net - 在 API 和后端之间使用什么作为队列
- c# - 我可以在这个查询中使用 lastordefault 或 firstordefault 吗?怎么能?
- asp.net-mvc - 在 asp.net MVC 应用程序中展开行时,Kendo 嵌套网格绑定内部网格
- node.js - 避免统一请求标头中的 Content-Length
- c# - 如何过滤子集合,将 datetime 属性与另一个一加时间跨度值进行比较?
- javascript - 如何在html中按下按钮时触发Angular Mentions?
- reactjs - 如何在 react-chart-js-2 中使用填充 true 隐藏边框
- logging - GCP StackDriver RESTful API 没有记录,即使它返回 200
- javascript - 如何在单个页面中处理多个 mathquill 元素