【问题标题】:Changing R object names and pathway in a loop over a function在函数的循环中更改 R 对象名称和路径
【发布时间】:2021-06-17 18:02:11
【问题描述】:
library('dplyr')
num_ens <- 10

我有一段代码从目录中获取 num_ens 数据文件,读入它们,取它们的平均值,并将它们保存为 1 个对象

A_tree <- lapply(1:num_ens, function(i) {
  # importing data on each index i
  r <- read.csv(
    paste0("/Users/sethparker/vox_LA_max/top_down_individ_sd1/ens_",i,"_0_tree_from_data.txt"), 
    header = FALSE
  )
  # creating add columns
  colnames(r) <- c("GPP","NPP","LA")
  r$month <- seq.int(nrow(r))
  r$run <- i
  
  return(r)
})
A_tree <- bind_rows(A_tree)
A_tree <- A_tree %>% group_by(month) %>% summarize(across(c(GPP,NPP,LA), mean))

我想自动自动化这个相同的过程来遍历 7 个目录:

/top_down_individ_sd1//top_down_individ_sd7/

并生成一系列对象:

A_treeG_tree

我没有成功尝试通过以下 for 循环的一些变体来实现这一点,这些变体产生了错误

letters <- LETTERS[seq(from = 1, to = 7)]
sd <- c("sd1","sd2","sd3","sd4","sd5","sd6","sd7")
for (j in 1:7) {
  paste0(letters[j],"_tree") <- lapply(1:num_ens, function(i) {
    # importing data on each index i
    r <- read.csv(paste0(paste0("/Users/sethparker/vox_LA_max/top_down_individ_",sd[j]),"/ens_",i,"_0_tree_from_data.txt"), 
                  header = FALSE)
    # creating add columns
    colnames(r) <- c("GPP","NPP","LA")
    r$month <- seq.int(nrow(r))
    r$run <- i
    
    return(r)
  })      
paste0(letters[j],"_tree") <- bind_rows(paste0(letters[j],"_tree"))
paste0(letters[j],"_tree") <- paste0(letters[j],"_tree") %>% group_by(month) %>% summarize(across(c(GPP,NPP,LA), mean))
}

我怎样才能不出错地实现这个目标

【问题讨论】:

  • paste0(letters[j],"_tree") &lt;- 将无法使用assign(paste0(letters[j],"_tree"), value) 或最好定义一个空的ll &lt;- list() 并附加ll[[j]] &lt;-

标签: r for-loop dplyr lapply


【解决方案1】:
tree <- list()
for (j in 1:7) {
  tree[[j]] <- lapply(1:num_ens, function(i) {
    # importing data on each index i
    r <- read.csv(paste0(paste0("/Users/sethparker/vox_LA_max/top_down_individ_",sd[j]),"/ens_",i,"_0_tree_from_data.txt"), 
                  header = FALSE)
    # creating add columns
    colnames(r) <- c("GPP","NPP","LA")
    r$month <- seq.int(nrow(r))
    r$run <- i
    
    return(r)
  })      
  tree[[j]] <- bind_rows(tree[[j]])
  tree[[j]] <- tree[[j]] %>% group_by(month) %>% summarize(across(c(GPP,NPP,LA), mean))
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-16
    • 2019-01-31
    • 2017-10-08
    • 1970-01-01
    • 1970-01-01
    • 2018-11-04
    相关资源
    最近更新 更多