При одновременном вводе нескольких файлов R выводит данные только из последнего файла

#r

#r

Вопрос:

Я пытаюсь создать код, в котором я одновременно ввожу несколько текстовых файлов. Каждый файл содержит таблицу с приведенным ниже примером, и приведенный ниже код реорганизует каждый из них. Прямо сейчас переменная out.file2 выводит только скорректированную таблицу из последнего файла, через который прошла функция. Я знаю, что код правильно перебирает каждый файл, потому что, если я использую print (out.file2) внутри инструкции for , он выведет все скорректированные файлы. Однако мне нужно иметь возможность присваивать этот вывод переменной, поскольку я планирую проводить сравнения по каждой таблице. Я не хочу перенаправлять какие-либо выходные данные в текстовый файл, потому что в конечном итоге я хотел бы выполнить эти сравнения в том же скрипте, что и приведенный ниже.

Я пытался настроить код с помощью 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)
    } 
  

Ответ №1:

«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)
}