【问题标题】:Using a variable to fetch a document使用变量获取文档
【发布时间】:2018-06-13 18:05:52
【问题描述】:

假设我想获取这些文档,这些文档以非常清晰的模式命名,例如 EIS_Chip14_1_pre。除了名称中的两个数字 6:18 和 1:4 之外,一切都是不变的。我正在使用 for 循环:

如何在存储向量的标题中同时包含“i”和“n”,以免覆盖它?

dat <- vector(mode = "list")
i <- numeric(13)
n <- numeric(4)
for(i in 6:18){
  for(n in 1:4){
    path <- paste0("C:/.../downloads/EIS_Chip",i,"_", n, "_pre.dat")
    dat_(i)[[n]] <- read.csv(file = path)
  }
}

【问题讨论】:

  • 这些似乎是与同一个想法相关的更复杂的问题,我正在尝试使用它们来解决我的问题,但我对 R 比较陌生,所以它并不容易。
  • 好吧,也许可以尝试实施其中一种解决方案,并描述你到底在哪里卡住了。从使用paste() 函数构建文件路径开始。
  • 现在我的主要问题是如何将 I 和 N 都放入存储向量名称中,这样我就不会覆盖它

标签: r variables


【解决方案1】:

这不一定是最好的解决方案,但它应该可以为您解决问题。

在你的外部循环的顶部,用一个空列表初始化一个变量tmp。在您的内部循环中,使用[[ 将结果存储到该列表的元素中。当你的内部循环完成后,assigntmp 中的值转换为使用paste0 动态命名的变量。

dat <- vector(mode = "list")
i <- numeric(13)
n <- numeric(4)
for(i in 6:18){
  tmp = list()
  for(n in 1:4){
    path <- paste0("C:/.../downloads/EIS_Chip",i,"_", n, "_pre.dat")
    list[[n]] <- read.csv(file = path)
  }
  assign(paste0("dat_",i),tmp)
}

解决此问题的更好方法是使用expand.grid 获取in 的每个组合,然后编写一个使用这些值读取文件的函数。最后,使用purrr::pmap 之类的东西来迭代你的值。这将返回一个包含 52 个元素的列表,每个元素对应一个您加载的文件。

read_in_file = function(i,n){
  path = paste0("C:/.../downloads/EIS_Chip",i,"_", n, "_pre.dat")
  return(read.csv(file=path))
}

combinations = expand.grid(i = 6:18, n = 1:4)
dat = purrr::pmap(combinations,read_in_file)

这是有效的,因为expand.grid 返回一个data.frame,这是一种特殊的列表。因为我们适当地命名了输入,purrr::pmap 处理输入列表并将它们正确分配给函数。

【讨论】:

    猜你喜欢
    • 2011-11-20
    • 1970-01-01
    • 2020-11-05
    • 2015-06-14
    • 1970-01-01
    • 2020-09-08
    • 2018-08-10
    • 2021-03-02
    • 1970-01-01
    相关资源
    最近更新 更多