Итерировать более трех списков одновременно в R - PullRequest
0 голосов
/ 29 мая 2020

Я хотел бы спросить, как перебирать три списка одновременно в R. На самом деле та же функция, что и purr :: walk2, выполняет для двух списков, но для трех или более списков. Я полагаю, что мне следует использовать функцию purr :: pwalk, но я не уверен.

Итак, у меня есть 3 списка (одинаковой длины):

buffers_points_with_data <-
  list.files(
    path = "data/buffers_points_with_data",
    pattern = "*.csv$",
    full.names = TRUE,
    recursive = FALSE
  )

species_data_CZ_moved <-
  list.files(
    path = "data/species_data_CZ_moved",
    pattern = "*.txt$",
    full.names = TRUE,
    recursive = FALSE
  )

species_data_GBIF_moved <-
  list.files(
    path = "data/species_data_GBIF_moved",
    pattern = "*.txt$",
    full.names = TRUE,
    recursive = FALSE
  )

И хочу запустить: прочитайте первый chr из списка buffers_points_with_data, затем первый chr из второго списка, первый chr из третьего списка, продолжайте до конца скрипта и начинайте со второго chr для каждого и так далее.

{ 
    clim <- read.csv("data/buffers_points_with_data/Acer negundo.csv", header = TRUE, sep = ",") #replace by 1st list
    occ.sp1 <- na.exclude(read.table("data/species_data_CZ_moved/Acer negundo.txt", h = TRUE)) #replace by 2nd list
    occ.sp2 <- na.exclude(read.table("data/species_data_GBIF_moved/Acer negundo.txt", h = TRUE)) #replace by 3rd list
#code continues
}

Я новичок в R и программировании, поэтому приношу свои извинения, если этот вопрос был задан в другом месте или текст несколько сбивает с толку.

Любая помощь или предложения были бы замечательными. Спасибо.

Ответы [ 2 ]

0 голосов
/ 29 мая 2020

Мы можем использовать map из purrr

library(dplyr)
library(purrr)
list(buffers_points_with_data , species_data_CZ_moved , species_data_GBIF_moved) %>% 
        map(~ map(.x, read.csv, header = TRUE))
0 голосов
/ 29 мая 2020

Вы можете использовать Map, который может перебирать 3 списка одновременно.

data <- Map(function(x, y, z) {
   clim <- read.csv(x, header = TRUE, sep = ",") 
   occ.sp1 <- na.exclude(read.table(y, header = TRUE)) 
   occ.sp2 <- na.exclude(read.table(z, header = TRUE)) 
   #Do something
   #Do something
}, buffers_points_with_data, species_data_CZ_moved, species_data_GBIF_moved)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...