#r #loops #for-loop
Вопрос:
У меня есть файл, хранящийся в каталоге с именем file1.csv, file2.csv, file3.csv…. file100.csv. Я должен запустить серию скриптов с изменением имени файла с 1,2,3…100. скрипт похож
a1 <- data2haplohh(hap_file="file1.csv", polarize_vcf=FALSE)
с последующим
a_1<-subset(a1, min_maf=0.05)
как мы можем запустить цикл над этими сципитами в R. Я пытаюсь, но получаю ошибки.
Ответ №1:
Способ сделать это в lapply
цикле —
filenames <- list.files(pattern = 'file\d \.csv', full.names = TRUE)
result <- lapply(filenames, function(x) {
a1 <- data2haplohh(hap_file=x, polarize_vcf=FALSE)
subset(a1, min_maf==0.05)
})
result
должен быть список длиной 100, если у вас 100 файлов.
Комментарии:
1. Спасибо за ответ. Если нам нужно обновить a1 до a2 для файла 2, что будет правильным способом. Я попробовал $i, но не могу прочитать файлы. Наконец, нам нужно записать эти выходные файлы в соответствующем порядке.
2. @DevenderArora Если ваша конечная цель-записать это как новый csv, измените последнюю строку на
write.csv(subset(a1, min_maf==0.05), paste0(tools::file_path_sans_ext(basename(x)), '_result.csv'), row.names = FALSE)
«вам не нужно создавать объекты , напримерa1
,a2
в глобальной среде».
Ответ №2:
Мы можем попробовать вот так
list2env(
setNames(
lapply(
seq(100),
function(i) {
subset(
data2haplohh(hap_file = sprintf("file%s.csv", i), polarize_vcf = FALSE),
min_maf = 0.05
)
}
),
paste0("a_", seq(100))
),
envir = .GlobalEnv
)
Комментарии:
1. Спасибо вам за код, он работает гладко. Сейчас я добавляю еще один шаг к коду, но он не распознается. В продолжение a_1 я выполняю еще один шаг для улучшения вывода с помощью a_2 Любая идея, как интегрировать этот шаг в рабочий процесс. Я буду благодарен вам за помощь. Спасибо