l oop для сбора 30 файлов - PullRequest
       9

l oop для сбора 30 файлов

0 голосов
/ 04 августа 2020

Привет, я новичок в функциях l oop. Я хочу иметь возможность прочитать свои 30 файлов и собрать каждый из них. Затем продолжайте их использовать. На первом этапе я беру объединенный файл и затем разбиваю его на 30 файлов на основе кода таблички. Таким образом, каждая из разных пластин становится файлом, названным по своему номеру c пластины. Этот бит работает, и у меня получается 30 файлов пластин.

    RickDADA2.split<- split.data.frame(RickDADA2, RickDADA2$platecode)
# Save
lapply(names(RickDADA2.split), function(x){
    write_csv(files[[x]], path = paste(x, ".csv", sep = ""))
    })

Затем я читаю все 30 файлов обратно в R (этот бит тоже работает) Каждый файл в виде 5 столбцов, и то, что мне нужно, чтобы уметь нужно вытащить 3 из этих 5 столбцов и затем распределить их в широком формате для каждого из 30 файлов:

    files.name<-list.files(pattern='ASV.csv')
files.name.list<-list('vector', length(files.name))
files.name].list <- lapply(files.name, function(x) read_csv(x))

Затем мне нужно иметь возможность обрабатывать файлы следующим образом, и я не могу понять, как написать l oop, чтобы заставить его работать ... Когда я пытаюсь выполнить эти два шага в коде, используя lapply, они выдают следующую ошибку:

    files.name %>% unite('code2', c(platecode, code), remove=T, sep='_')
    files.name %>% spread(key='code2', value='abund', fill=0)

Большое спасибо за вашу помощь с l oop functions

1 Ответ

0 голосов
/ 04 августа 2020

Вероятно, ваша проблема (я не могу быть уверена, поскольку вы просто говорите «это не сработает» и не предоставляете свои входные данные), что files[1-30] не является допустимым именем переменной R.

Попробуйте что-то вроде этого: [непроверенный код]

fileNames <- list.files(pattern='ASV.csv')
fileContents <- lapply(fileNames, read_csv)
finalResult <- lapply(
                 fileContents, 
                 function(x) {
                   x %>% 
                     unite('code2', c(platecode, code), remove=T, sep='_') %>%
                     spread(key='code2', value='abund', fill=0)
                 }

Последние два шага можно объединить в один с помощью

finalResult <- lapply(
                 fileNames,
                 function(fName) {
                   read_csv(fName) %>% 
                     unite('code2', c(platecode, code), remove=T, sep='_') %>%
                     spread(key='code2', value='abund', fill=0)
                 }

Или сделать все сразу с помощью

finalResult <- lapply(
                 list.files(pattern='ASV.csv'),
                 function(fName) {
                   read_csv(fName) %>% 
                     unite('code2', c(platecode, code), remove=T, sep='_') %>%
                     spread(key='code2', value='abund', fill=0)
                 }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...