Lettura di più file in più frame di dati

Nella cartella d: \, ho molti file Stata, come data_aa_1.dta, data_aa_2.dta, data_aa_3.dta data_bb_1.dta, data_bb_2.dta, data_bb_3.dta, data_cc_1.dta …. Voglio convertire quei file e ottenere il maggior numero di frame di dati come i file dta in R. Quindi, credo di dover eseguire il ciclo su c (“aa”, “bb”, “cc”) ec (1: 3). Ho provato qualcosa di simile al seguente:

library(foreign) for(i in c("aa","bb","cc"){ for (j in 1:3){ data_[i]_[j] <-read.dta("d:/folder/data_[i]_[j].dta") } } 

Ma questo sembra sbagliato – sicuramente.

Qualsiasi aiuto sarà apprezzato.

Grazie!

    C’è indubbiamente una soluzione più elegante, tuttavia

     library(foreign) for(i in c("aa","bb","cc"){ for (j in 1:3){ obj_name <- paste('data', i, j, sep ='_') file_name <- file.path('d:/folder',paste(obj_name,'dta', sep ='.')) input <- read.dta(file_name) assign(obj_name, value = input) } } 

    MODIFICARE

    Evitando il ciclo for e usando il suggerimento di @ joran su list.files

     dta_files <- list.files('d:/folder', pattern = '.dta', full.names = T) lapply(dta_files, function(fname){ input <- read.dta(fname) obj_name <- tools::file_path_sans_ext(basename(fname)) assign(obj_name, value input, env = .GlobalEnv)}) 

    Prova questo,

     fl = list.files(pattern = "dta", path = "d:/folder", full.names = TRUE) dl = lapply(fl, foreign::read.dta) names(dl) = tools::file_path_sans_ext(fl) str(dl)