首页 > 解决方案 > 修改 R 中的代码

问题描述

我希望这条消息能找到你。我最近在 R 中编写了一个完美运行的代码,但不幸的是,由于它基于循环,因此处理大数据非常耗时。现在,我想知道如何重写这段代码,这样就不需要循环了。如果有人能提供帮助,我真的很感激。

for (k in 1:nrow(migration)){
  migration$district[k]<-
    sample(0:30, size=1,replace = TRUE,prob=migration[k,7:37])
}

标签: r

解决方案


似乎在这种情况下,使用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 

推荐阅读