我已经阅读了几个与此相关的问题,但没有一个是我正在寻找的。
最好的一个是使用readxl
包
library(readxl)
file.list <- list.files(pattern='*.xlsx')
df.list <- lapply(file.list, read_excel)
但正如解释的那样,它给出了一个列表。 我想要的是在工作目录中按名字获取每个文件
我正在做的是将setwd
放入我拥有所有xls文件的目录中然后根据其名称逐个加载它们,例如
mydf1 <- read_excel("mydf1.xlsx")
mydfb <- read_excel("mydfb.xlsx")
datac <- read_excel("datac.xlsx")
有没有其他方法可以让他们一遍又一遍地重复这个名字?
答案 0 :(得分:4)
您可以assign
使用for
循环:
library(readxl)
file.list <- list.files(pattern = "*.xlsx")
for(i in file.list) {
assign(sub(".xlsx", "", i), read_excel(i))
}
PS:你需要sub
来删除文件扩展名(否则你会得到对象mydf1.xlsx
而不是mydf1
)。
答案 1 :(得分:3)
这是purrr包的完美用例:
func setNonNilDictionary() {
var nonNilProperties = [String: Any]()
for child in Mirror(reflecting: self).children {
guard let label = child.label else { return }
if case Optional<Any>.some(let value) = child.value {
nonNilProperties[label] = value
}
}
nonNilPropertyDict = nonNilProperties
}
答案 2 :(得分:2)
你可以在你的循环中使用这样的东西:
lapply(seq_along(file.list), function(x){
df<-read_excel(x)
y<-gsub("\\..*","",x)
assign(y, df, envir=globalenv())
})
答案 3 :(得分:1)
您只是认为您希望每个人加载到全局环境中。随着你对R越来越有经验,你会发现在大多数(如果不是全部)情况下,最好将这样的相关对象放在一个列表中。
如果它们都在列表中,那么您可以使用lapply
或sapply
在每个元素上运行相同的命令,而不是尝试创建一个新的循环来获取每个对象并对其进行处理。
列表方法不太可能覆盖您可能想要保留的其他对象或导致远距离错误的其他编程(这可能很难追踪)。