Как написать эффективный код для импорта нескольких файлов SAS - PullRequest
1 голос
/ 18 марта 2019

Я борюсь с созданием эффективного кода для импорта файла данных SAS.

Мой код следующий:

library(foreign)
library(haven)
f <- file.path(path = "E:/Cohortdata/Raw cohort/Nationalscreeningcohort/01.jk", 
               c("nhis_heals_jk_2002.sas7bdat","nhis_heals_jk_2003.sas7bdat" ,"nhis_heals_jk_2004.sas7bdat",
                 "nhis_heals_jk_2005.sas7bdat","nhis_heals_jk_2006.sas7bdat","nhis_heals_jk_2007.sas7bdat",
                 "nhis_heals_jk_2008.sas7bdat","nhis_heals_jk_2009.sas7bdat","nhis_heals_jk_2010.sas7bdat",       "nhis_heals_jk_2011.sas7bdat","nhis_heals_jk_2012.sas7bdat","nhis_heals_jk_2013.sas7bdat"))
d <- lapply (f, read_sas)

Я знаю, что переписать его с помощью цикла for было бы гораздо эффективнее, но я не знаю, как должен выглядеть код

Я был бы очень благодарен, если бы вы мне помогли.

1 Ответ

2 голосов
/ 18 марта 2019

Это вариант кода, который я разместил здесь , но вы можете использовать его и для файлов SAS.

Обратите внимание, что вместо использования file.path() я использовал list.files().Это позволило мне прочитать все файлы по пути "E:/Cohortdata/Raw cohort/Nationalscreeningcohort", где я и предположил, что ваши файлы находятся.Кроме того, я использовал аргумент pattern, чтобы искать только файлы sas7bdat.

list.files() возвращает вектор, здесь вы можете использовать свой метод *apply, который вам нужен.Однако мне нравится менять vector на tbl_df и использовать подход tidyverse.Что означает чтение всех файлов с использованием purrr::map() (часть tidyverse) и создание больших данных tbl_df всех файлов.

library(tidyverse)
library(foreign)
library(haven)

df <- list.files(path = "E:/Cohortdata/Raw cohort/Nationalscreeningcohort",
                 full.names = TRUE,
                 recursive = TRUE,
                 pattern = "*.sas7bdat") %>% 
  tbl_df() %>%
  mutate(data = map(value, read_sas)) %>%
  unnest(data) 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...