如何将列表取消列表到特定级别

时间:2018-02-07 17:59:47

标签: r excel

以下函数可用于加载整个Excel工作簿

install.packages("xlsx")
library("xlsx")
library(readxl)   
read_excel_allsheets <- function(filename) 
{
sheets <- readxl::excel_sheets(filename)
x <- lapply(sheets, function(X) readxl::read_excel(filename, sheet = X))
names(x) <- sheets
x
}
mysheets <- read_excel_allsheets(choose.files())

我正在尝试找到一种方法将所有工作表作为单独的数据帧重新列入全局环境。因此,我一直使用mysheets $一次访问它们,但这对于大型工作簿使用来说效率低下。

我试过了

unlist(mysheets, recursive=F)

但它没有提供所需的结果。

1 个答案:

答案 0 :(得分:0)

我没有看到使用mysheets$的效率低下。您可以将mysheets重命名为较短的名称,如果那是困扰您的话。如果确实想要将dfs移动到全局环境,那么你可以使用这个hack:

for (s in names(mysheets)) {
  eval(parse(text = sprintf("%s <- mysheets[['%s']]", make.names(s), s)))
}
rm(mysheets)

请注意,make.names将更改dfs的名称。如果您想保留名称,请将for语句中的行更改为:

eval(parse(text = sprintf("`%s` <- mysheets[['%s']]", s, s)))