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