使用列表名称作为使用XLConnect的工作表名称
问题描述:
正如标题所示,我想这样做。下面的例子:使用列表名称作为使用XLConnect的工作表名称
library(stringr)
library(XLConnect)
df <- data.frame(do.call("rbind", lapply(1:10, function(i) rnorm(10))))
df.list <- rep(list(df), 10)
names(df.list) <- paste("DataFrame", str_pad(1:length(df.list), 2, pad = "0"), sep = "")
df.list.workbook <- loadWorkbook("df.list.workbook.xlsx", create = TRUE)
lapply(1:length(df.list), function(i) createSheet(df.list.workbook, name = names(df.list[i])))
lapply(df.list[1:length(df.list)], function(i) writeWorksheet(df.list.workbook, i, sheet = names(i)))
最后一行是它抛出了一个错误:
Error: IllegalArgumentException (Java): Sheet index (-1) is out of range (0..9)
要解决这一点,我想:
lapply(df.list[1:length(df.list)], function(i) print(names(i)))
,实现了列的名称被传递给表单变量。任何想法如何克服这一点?
答
您需要lapply
超过指数,而不是名单:
lapply(seq_along(df.list), function(i) writeWorksheet(df.list.workbook, df.list[[i]], sheet = names(df.list)[i]))
答
XLConnect在很多地方量化。你的情况,这对于createSheet
和writeWorksheet
,所以你可以写:
df.list.workbook <- loadWorkbook("df.list.workbook.xlsx", create = TRUE)
createSheet(df.list.workbook, name = names(df.list))
writeWorksheet(df.list.workbook, data = df.list, sheet = names(df.list))
saveWorkbook(df.list.workbook)
'名(df.list)[I]'? – James 2012-03-24 08:29:00
@詹姆斯,给我'在打印错误(名称(df.list)[i]): 在选择函数'print'的方法中评估参数'x'时出错:名称中的错误(df.list) [i]:无效的下标类型'list'' – Ben 2012-03-24 08:32:20
啊,我明白了。还需要更改为:'lapply(seq_along(df.list),function(i)writeWorksheet(df.list.workbook,df.list [[i]],sheet = names(df.list)[i]) '。需要在索引而非列表上使用 – James 2012-03-24 08:38:27