【问题标题】:Read multiple .tsv files in a loop in R [duplicate]在R中循环读取多个.tsv文件[重复]
【发布时间】:2021-01-25 21:16:13
【问题描述】:

我正在简化我的脚本,并希望使用一些 for 循环。现在我正在独立阅读以下五个 .tsv 文件。我想编写一个循环,读取每个循环,并按从 2008 年开始到 2012 年结束的顺序为其分配一个变量名。这些文件保存在一个文件夹中,其中包含对这一步不重要的其他文件。有任何想法吗?谢谢。

t2008 <- read.table(file = './T2008.tsv', sep = '\t', header = TRUE)
t2009 <- read.table(file = './T2010.tsv', sep = '\t', header = TRUE)
t2011 <- read.table(file = './T2009.tsv', sep = '\t', header = TRUE)
t2010 <- read.table(file = './T2011.tsv', sep = '\t', header = TRUE)
t2012 <- read.table(file = './T2012.tsv', sep = '\t', header = TRUE)

【问题讨论】:

    标签: r


    【解决方案1】:

    函数assign是我们这里的朋友:

    years <- 2008:2012
    variable_names <- paste0("T", years)
    
    for(i in variable_names){
      filename <- paste0('./', i, ".tsv")
      dat <- read.table(file = filename, sep = '\t', header = TRUE)
      assign(i, dat)
    }
    

    虽然我无法在不访问您的文件的情况下测试这个确切的代码,但这是我为测试它所做的:

    years <- 2008:2012
    variable_names <- paste0("T", years)
    
    for(i in variable_names){
      filename <- paste0('./', i, ".tsv")
      dat <- filename
      assign(i, dat)
    }
    

    在我的全局环境中生成五个新对象,从 T2008 到 T2012,预期值:“./T2008.tsv”、“./T2009.tsv”等。

    【讨论】:

    • 这甚至不起作用,因为 i 在每次迭代期间都会被重写。你真正想要的是res = list() 和res[[filename]] = dat
    • @Colombo 我不认为这是正确的 - R 足够聪明,可以分配 i 的 值 而不是每次都分配“i”。我无法使用 OP 的文件对其进行测试,但请查看我对我得到的测试输出的编辑。
    • 感谢大家的帮助!我想出了一个对我有用的解决方案。我会在这里发布给其他有类似问题的人:{r} all_files &lt;- vector(mode = "list", length = length(c(2008:2012)) ) ite_input &lt;- 1 sum_nrow1 &lt;- 0 for (i in c(2008:2012)) { filename &lt;- paste("T", i , ".tsv", sep = "") all_files[[ite_input]] &lt;- read.table(file = filename, sep = '\t', header = TRUE) sum_nrow1 &lt;- sum_nrow1 + nrow(all_files[[ite_input]]) ite_input &lt;- ite_input + 1 }
    • @Dubukay 哦,对不起,我尽量避免assign,所以我不太熟悉它的用法(并且误读了文档)。不过,我认为它的解决方案不好,应该将其保存到列表中以避免副作用。然后可以使用do.call(rbind, list) 轻松合并文件(如果它们共享相同的格式)。
    • @Colombo 同意,这当然不是我会做的,看起来 OP 最终发现这是一个更好的解决方案,但我总是尽可能地给出要求的答案!
    猜你喜欢
    • 2020-06-17
    • 2015-04-23
    • 2011-08-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多