在循环(R)中使用全局环境中的对象

时间:2016-12-03 16:31:32

标签: r loops xlconnect

我正在尝试使用来自全球环境的数据框填充对象wb(正式班级工作簿XLConnect)中的现有工作表

我有一个数据框名称列表 - dataframe_list和工作表名称列表 - sheetsname,两者都是字符向量

如果wb中的姓名和dataframe_list中的工作表sheetsname的名称相等,我已创建了一个循环来填充wb中的相应工作表

我的问题是,当我运行循环时,特别是data=dataframe_list[k],循环使用名称而不是具有相应名称的数据框。

希望你帮忙

for(k in 1:length(dataframe_list)) {
for(i in 1:length(sheetsname)) {

if (dataframe_list[k]==sheetsname[i]) {
        writeWorksheet(wb,data=dataframe_list[k],sheet=as.character(dataframe_list[k]),startRow = 49,
                       startCol = 3, header = FALSE)

}}
}

2 个答案:

答案 0 :(得分:2)

要从名称中返回实际数据框,而不仅仅是名称本身,请使用get。如在

    writeWorksheet(wb, data = get(dataframe_list[k]),
       sheet=as.character(dataframe_list[k]), startRow = 49,
       startCol = 3, header = FALSE)

注意,未经测试,因为这不是一个完整的可重复示例

答案 1 :(得分:0)

XLConnect的writeWorksheet已经过矢量化,因此您可以提供list data.frame个和工作表名称的向量,如下所示:

# Collect data.frames in a list
dfs <- lapply(dataframe_list, get)

writeWorksheet(wb, data = dfs, sheet = sheetnames, ...)

这里不需要for循环。