r - 修改 R 中的代码
问题描述
我希望这条消息能找到你。我最近在 R 中编写了一个完美运行的代码,但不幸的是,由于它基于循环,因此处理大数据非常耗时。现在,我想知道如何重写这段代码,这样就不需要循环了。如果有人能提供帮助,我真的很感激。
for (k in 1:nrow(migration)){
migration$district[k]<-
sample(0:30, size=1,replace = TRUE,prob=migration[k,7:37])
}
解决方案
似乎在这种情况下,使用apply
可能比循环更有效。在测试数据集上运行的示例是:
#Make up some test data
n <- 10000
migration <- data.frame(lapply(1:37, function(x)runif(n)))
names(migration) <- c("district", paste0("col",2:37))
#Code from question
system.time(
for (k in 1:nrow(migration)){
migration$district[k]<-
sample(0:30, size=1,replace = TRUE,prob=migration[k,7:37])
}
)
# user system elapsed
# 1.99 0.01 2.00
#Alternative approach
system.time({
migration$district <- apply(migration[7:37], 1, function(x){sample(0:30, size=1, replace = TRUE, prob=x)})
}
)
# user system elapsed
# 0.06 0.00 0.06
推荐阅读
- node.js - 如何从节点后端获取数据以响应前端
- javascript - user-scalable=no 但仍然能够在 web 地图应用程序上缩放整个页面?
- google-apps-script - 如果访客是所有者,Google Calendar API 事件访客 getGuestStatus() 不会返回
- vue.js - Vue3 测试库 - vue-i18n 不加载文本
- python - 为 pandas 数据帧的每一行随机采样非空列值
- sharepoint-online - 是否可以通过 UploadSession 将大文件流式传输到 Sharepoint?
- javascript - 停止侦听器在同一单击 EventListener 内触发而不将其删除
- python - 如何在 tkinter 画布上放置动画?
- reactjs - 如何在页面重新加载后使计数器按钮保持不变
- c# - 使用linq mvc c#从数据库中检索图像