首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用替换循环,sapply

用替换循环,sapply
EN

Stack Overflow用户
提问于 2022-11-05 14:33:23
回答 2查看 41关注 0票数 0

我对R非常陌生,我听说最好用apply函数替换循环,但是我无法思考如何用这个例子来转换循环。任何帮助都将不胜感激。

代码语言:javascript
复制
file_path is a list of file names
file_path[1] = "/home/user/a.rds"
file_path[2] = "/home/user/b.rds"
...

vector_sum <- rep(0,50000)
for(i in 1:5){
  temp_data <- readRDS(file_path[i])
  temp_data <- as.matrix(temp_data[,c("loss_amount")])
  vector_sum <- vector_sum + temp_data
}

我的目标是循环遍历所有文件,在每个文件中只保留loss_amount列并将其添加到vector_sum,因此最终vector_sum是来自所有文件的所有loss_amount列的总和。

EN

回答 2

Stack Overflow用户

发布于 2022-11-05 14:43:36

下面是使用lapply解决问题的一种可能方法

代码语言:javascript
复制
sum(unlist(lapply(file_path, \(fle) readRDS(fle)[, "loss_amount"]))) 
# or
do.call(sum, lapply(file_path, \(fle) readRDS(fle)[, "loss_amount"]))
票数 0
EN

Stack Overflow用户

发布于 2022-11-05 14:58:37

使用rowSums

代码语言:javascript
复制
rowSums(sapply(file_path, \(x) readRDS(x)[, 'loss_amount'], USE.NAMES=F))
# [1]  1.2060989  1.4248851 -0.4759345

数据:

代码语言:javascript
复制
set.seed(42)
l <- replicate(3, matrix(rnorm(6), 3, 2, dimnames=list(NULL, c('x', 'loss_amount'))), simplify=F)
dir.create('foo')  ## creates/overwrites `foo` in wd!
Map(\(x, y) saveRDS(x, paste0('foo/', y, '.rds')), l, letters[seq_along(l)])
file_path <- list.files('foo', full.names=TRUE)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74328605

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档