#r
#r
Вопрос:
Я просто слишком долго возился с этим, но я не могу понять, что я делаю неправильно. Может кто-нибудь, пожалуйста, дать мне подсказку?
У меня есть список имен файлов. Эти имена присваиваются функции, которая должна открывать файлы (spss-файлы) и возвращать список фреймов данных.
list_of_df <- list()
does_something <- function(...)
items = list(...)
for (item in items){
# open spss-file as data.frame
# ...
df <- data.frame(var1 = "test")
# put dataframe in 'list_of_df'
list_of_df <- append(list_of_df, df)
}
return(list_of_df)
}
filenames <- c("file1.sav", "file2.sav", "file3.sav")
for(filename in filenames){
df_output <- does_something(filename)
}
df_output # Should be a list with three data.frames
Заранее спасибо!
Комментарии:
1. Две вещи: во-первых, вам не нужны два отдельных цикла, вы могли бы упростить все это до одного; во-вторых, если вы вместо этого используете
lapply
вместо первого цикла и функция возвращает adata.frame
, то результатом будет список data.frames . Вы просили только подсказку, но я могу дать более подробную информацию, если хотите!2. да, пожалуйста. Я всегда заинтересован в улучшении своего кода.
3. Вторая часть приведенного ниже ответа отражает то, на что я намекал 🙂
Ответ №1:
Несколько небольших правок, которые, надеюсь, укажут вам правильное направление:
library(haven) # for loading .sav files
loadSPSSFiles <- function(fileNames){
# Initialise a list to store the dataframes
items <- list()
# Load each file and store
for(fileName in fileNames){
items[[fileName]] <- read_sav(fileName)
}
return(items)
}
fileNames <- c("file1.sav", "file2.sav", "file3.sav")
spssData <- loadSPSSFiles(fileNames)
Редактирование, отражающее комментарий @RaphaelS выше об использовании lapply
:
library(haven) # for loading .sav files
fileNames <- c("file1.sav", "file2.sav", "file3.sav")
spssData <- lapply(fileNames, FUN=read_sav)