首页 > 解决方案 > 一次引入多个文件时,R仅输出最后一个文件的数据

问题描述

我正在尝试创建一个代码,在其中一次引入多个文本文件。每个文件都包含一个表格,下面有一个示例,下面的代码重新组织了每个文件。现在,变量 out.file2 仅从函数循环通过的最后一个文件输出调整后的表。我知道代码正确循环每个文件,因为如果我在for语句中使用 print (out.file2),它将输出所有调整后的文件。但是,我需要能够将此输出分配给一个变量,因为我计划对每个表进行比较。我不想将任何输出重定向到文本文件,因为我想最终在与下面的脚本相同的脚本中进行这些比较。

我尝试使用 function() 和 lapply() 调整代码,但没有任何区别。我也试图从以前的问题中找到解决方案,但还不能让它发挥作用。如果有人有任何建议,我将不胜感激!

示例表 - 我意识到格式很奇怪,但这就是它在文本文件中并引入代码时的显示方式,如下所示。共有 23 列,每个名称以“col..”开头

+---------------------------------------------------------------------------------+
|   col1 col2    col3 col4 col5 col6    
+
|  1      33  6.51    44     16    6.6               
|   col7      col8    col9 col10 col11 col12 
|  2000        95       4   555    33    11        
|  col13 col14    col15 col16 col17  col18      
|  30      ax       53     ax   43    3687       
|  col19 col19    col20 col21 col22                 
|    355     ax     22    34    44                   
|   col23                                                             
|   432                                                              
+---------------------------------------------------------------------------------+

代码:

 vcffiles = dir(path = "filepath", pattern=".txt") #longneutraldatac
    out.file<- numeric()
    library(dplyr)
    library(tidyr)
    out.file<- numeric()
    for (i in 1:length(vcffiles)){  #length(vcffiles))
      lines = readLines(vcffiles[i]) 
      ind1 <- seq(1, length(lines), by = 2)
      ind2 <- seq(2, length(lines), by = 2)
      out <- read.table(header = TRUE, text = c(
        paste(lines[ind1], collapse = " "),
        paste(lines[ind2], collapse = " ")
      ))
      out.file2 <- rbind(out.file, out)
    } 

标签: r

解决方案


“out.file2”在循环的每次迭代中由“out.file”(空向量)和“out”(文本文件)构成。上一次迭代的“out”的内容就丢失了。如果您在循环中更新“out.file”而不是“out.file2”,它应该可以工作。

vcffiles = dir(path = "filepath", pattern=".txt")#longneutraldatac
out.file<- numeric()

for (i in 1:length(vcffiles)){  #length(vcffiles))
  lines = readLines(vcffiles[i]) 
  ind1 <- seq(1, length(lines), by = 2)
  ind2 <- seq(2, length(lines), by = 2)
  out <- read.table(header = TRUE, text = c(
    paste(lines[ind1], collapse = " "),
    paste(lines[ind2], collapse = " ")
  ))
  out.file <- rbind(out.file, out)
} 

推荐阅读