Это должно делать то, что вы хотите, сохраняя фреймы данных в списке. Если вы предпочитаете отдельные объекты, изучите множественное назначение с помощью zeallot
(РЕДАКТИРОВАТЬ: добавлен пример)
numFiles = 2
files <- data.frame(
fileNum = c (1:numFiles),
fileName = c("one.xlsx", "two.xlsx"), # try list.files(pattern = "*.xlsx") to automate this
sheetName = c("Sheet1","Sheet2"),
stringsAsFactors = F
)
data = list()
for (n in 1:numFiles) {
data[[n]] = readxl::read_xlsx(path = files$fileName[n], sheet = files$sheetName[n])
}
library(zeallot)
c(myname1,myname2) %<-% data
Изменить: мне на ум пришел более краткий способ, который должен быть ближе к тому, что вы пытались достичь:
numFiles = 2
files <- data.frame(
fileNum = c (1:numFiles),
fileName = c("one.xlsx", "two.xlsx"), # try list.files(pattern = "*.xlsx") to automate this
sheetName = c("Sheet1","Sheet2"),
stringsAsFactors = F
)
for (n in 1:numFiles) {
assign(paste0("Data",substr(files$fileName[n],1,nchar(files$fileName[n])-5)), # object name
readxl::read_xlsx(path = files$fileName[n], sheet = files$sheetName[n])) # data
}