在循环中使用全局环境中的对象 (R)
Working with objects from Global Environment in loops (R)
我正在尝试用我的全局环境
中的数据帧填充对象 wb
(正式 class 工作簿 XLConnect)中现有的 sheets
我有一个数据框名称列表 - dataframe_list
,以及一个 sheet 个名称列表 - sheetsname
,两者都是字符向量
如果我的 dataframe_list
中的名称和 sheet sheetsname
中的名称,我已经创建了一个循环来填充 wb
中相应的 sheets 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)
}}
}
为了 return 来自其名称的实际数据框,而不仅仅是名称本身,请使用 get
。如
writeWorksheet(wb, data = get(dataframe_list[k]),
sheet=as.character(dataframe_list[k]), startRow = 49,
startCol = 3, header = FALSE)
注意,未测试,因为这不是提供的完整可重现示例
XLConnect 的 writeWorksheet
是矢量化的,因此您可以提供 list
个 data.frame
和一个 sheet 个名称的矢量,如下所示:
# Collect data.frames in a list
dfs <- lapply(dataframe_list, get)
writeWorksheet(wb, data = dfs, sheet = sheetnames, ...)
这里不需要for循环。
我正在尝试用我的全局环境
中的数据帧填充对象wb
(正式 class 工作簿 XLConnect)中现有的 sheets
我有一个数据框名称列表 - dataframe_list
,以及一个 sheet 个名称列表 - sheetsname
,两者都是字符向量
如果我的 dataframe_list
中的名称和 sheet sheetsname
中的名称,我已经创建了一个循环来填充 wb
中相应的 sheets 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)
}}
}
为了 return 来自其名称的实际数据框,而不仅仅是名称本身,请使用 get
。如
writeWorksheet(wb, data = get(dataframe_list[k]),
sheet=as.character(dataframe_list[k]), startRow = 49,
startCol = 3, header = FALSE)
注意,未测试,因为这不是提供的完整可重现示例
XLConnect 的 writeWorksheet
是矢量化的,因此您可以提供 list
个 data.frame
和一个 sheet 个名称的矢量,如下所示:
# Collect data.frames in a list
dfs <- lapply(dataframe_list, get)
writeWorksheet(wb, data = dfs, sheet = sheetnames, ...)
这里不需要for循环。