我对R非常陌生,我听说最好用apply函数替换循环,但是我无法思考如何用这个例子来转换循环。任何帮助都将不胜感激。
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列的总和。
发布于 2022-11-05 14:43:36
下面是使用lapply解决问题的一种可能方法
sum(unlist(lapply(file_path, \(fle) readRDS(fle)[, "loss_amount"])))
# or
do.call(sum, lapply(file_path, \(fle) readRDS(fle)[, "loss_amount"]))发布于 2022-11-05 14:58:37
使用rowSums。
rowSums(sapply(file_path, \(x) readRDS(x)[, 'loss_amount'], USE.NAMES=F))
# [1] 1.2060989 1.4248851 -0.4759345数据:
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)https://stackoverflow.com/questions/74328605
复制相似问题