dmv*_*nna 6 r function export-to-excel dataframe
从这篇文章中我得到了一个脚本,它将列表作为单独的工作表导出到Excel文件中(代码如下).现在我想将它包装在一个方便的函数中,通过提供输入列表名称和输出文件名来重现此行为.
样本数据:
var1 <- list('2003' = 1:3, '2004' = c(4:3), '2005' = c(6,4,1), '2006' = 1:4 )
Run Code Online (Sandbox Code Playgroud)
当前脚本:
require("XLConnect")
wb <- loadWorkbook("var1.xlsx", create = TRUE)
createSheet(wb, names(var1))
writeWorksheet(wb, var1, names(var1),header=FALSE)
saveWorkbook(wb)
Run Code Online (Sandbox Code Playgroud)
免责声明: 虽然我很想问这么简单的问题,但我相信很多其他的SO访客都会喜欢在这里找到这些信息; 7)
编辑::即用功能:
save.excel <-function(.list, default = 'var1', path = ''){
require("XLConnect")
.name <- as.list(match.call())[2]
if(is.language(.name[[1]])) wb_name <- paste0(paste0(path, default, collapse = '/'), '.xlsx')
if(is.symbol(.name[[1]])) wb_name <- paste0(paste0(path, as.character(.name), collapse = '/'), '.xlsx')
wb <- loadWorkbook(wb_name, create = TRUE)
createSheet(wb, names(.list))
writeWorksheet(wb,.list, names(.list),header=FALSE)
saveWorkbook(wb)
}
Run Code Online (Sandbox Code Playgroud)
与下面的解决方案的唯一区别是我将XLConnect添加为函数内部请求的库,以防您之前没有手动执行; 7)
这是未经测试的,因为XLConnect不会安装在我的机器上.但是类似下面的东西可能会起作用
具有两个参数的函数
my_list - 您希望将元素导出为单独工作表的列表wb_name - 工作簿的名称该功能看起来像这样
write_list <-function(my_list, wb_name = 'var1.xlsx') {
wb <- loadWorkbook(wb_name, create = TRUE)
createSheet(wb, names(my_list))
writeWorksheet(wb, my_list, names(my_list),header=FALSE)
saveWorkbook(wb)
}
Run Code Online (Sandbox Code Playgroud)
如果你想使用它的名字list来创建文件,那么你可以玩得开心
match.call,is.symbol和is.language.您执行此操作的原因详情如下
write_list_name <-function(.list, default = 'var1', path = ''){
.name <- as.list(match.call())[2]
if(is.language(.name[[1]])){
wb_name <- sprintf("%s/%s.xlsx", path, default)
}
if(is.symbol(.name[[1]])) {
wb_name <- sprintf("%s/%s.xlsx", path, as.character(.name))
}
wb <- loadWorkbook(wb_name, create = TRUE)
createSheet(wb, names(.list))
writeWorksheet(wb,.list, names(.list),header=FALSE)
saveWorkbook(wb)
}
Run Code Online (Sandbox Code Playgroud)
在is.language/ is.symbol/ match.call处理这两种情况
write_list_name(var1)
#in which case .name[[1]] is the symbol var1
Run Code Online (Sandbox Code Playgroud)
和
write_list_name(list(n=2:3))
# in which case .name[[1]] is list(n=2:3), and class language
# a file called list(n=2:3).xlsx would be not ideal, hence the `default` argument.
Run Code Online (Sandbox Code Playgroud)