R For loop/map2 遍历两个列表
R For loop/map2 that iterates over two lists
我已阅读 [this][1] 和 [this][2],但无法根据我的用例进行调整。我正在尝试使用 openxlsx
函数 writeData
来编写我保存在向量中的几个数据帧以及工作簿表的名称,它们也保存在向量中:
names_of_worksheets <- c(
"total_suppliers",
"nato_fvey_suppliers",
"us_suppliers",
"sole_sourcing",
"single_sourcing",
"geographic_risk_us_only",
"foreign_dependence",
"exposure_to_non_nato_fvey"
)
names_of_dataframes <- c(
total_suppliers,
nato_fvey_suppliers,
us_suppliers,
sole_sourcing,
single_sourcing,
geographic_risk_us_only,
foreign_dependence,
exposure_to_non_nato_fvey
)
我想写的伪代码是一个 for 循环(我想我可以在 python 中做)迭代两个 lists/vectors:
for (name_of_worksheet, name_of_dataframe in names_of_worksheets, names_of_data_frames) {
writeData(workbook, name_of_worksheet, name_of_dataframe)
}
那当然不行。我已经尝试 map2
但遇到了一个我无法处理的错误:
map2(names_of_worksheets, names_of_dataframes, writeData, workbook)
Error: Mapped vectors must have consistent lengths:
* `.x` has length 8
* `.y` has length 25
有什么想法吗?谢谢!
[1]:
[2]: R Loop Iterating Over Two Lists
我认为您可能希望使用 list()
而不是 c()
来收集数据帧。
后者将获取数据帧的所有列并将它们作为独立元素放入列表中(这就是为什么会出现长度不一致的错误),而前者将它们作为单独的元素。 map2
应该可以同时进行迭代。
看起来 writeData
将工作簿作为第一个元素,目前您的 map2 调用会将其用作第三个元素,因此您可能想将其重写为
map2(names_of_worksheets, names_of_dataframes, function(x,y) writeData(workbook, x, y))
我已阅读 [this][1] 和 [this][2],但无法根据我的用例进行调整。我正在尝试使用 openxlsx
函数 writeData
来编写我保存在向量中的几个数据帧以及工作簿表的名称,它们也保存在向量中:
names_of_worksheets <- c(
"total_suppliers",
"nato_fvey_suppliers",
"us_suppliers",
"sole_sourcing",
"single_sourcing",
"geographic_risk_us_only",
"foreign_dependence",
"exposure_to_non_nato_fvey"
)
names_of_dataframes <- c(
total_suppliers,
nato_fvey_suppliers,
us_suppliers,
sole_sourcing,
single_sourcing,
geographic_risk_us_only,
foreign_dependence,
exposure_to_non_nato_fvey
)
我想写的伪代码是一个 for 循环(我想我可以在 python 中做)迭代两个 lists/vectors:
for (name_of_worksheet, name_of_dataframe in names_of_worksheets, names_of_data_frames) {
writeData(workbook, name_of_worksheet, name_of_dataframe)
}
那当然不行。我已经尝试 map2
但遇到了一个我无法处理的错误:
map2(names_of_worksheets, names_of_dataframes, writeData, workbook)
Error: Mapped vectors must have consistent lengths:
* `.x` has length 8
* `.y` has length 25
有什么想法吗?谢谢!
[1]:
我认为您可能希望使用 list()
而不是 c()
来收集数据帧。
后者将获取数据帧的所有列并将它们作为独立元素放入列表中(这就是为什么会出现长度不一致的错误),而前者将它们作为单独的元素。 map2
应该可以同时进行迭代。
看起来 writeData
将工作簿作为第一个元素,目前您的 map2 调用会将其用作第三个元素,因此您可能想将其重写为
map2(names_of_worksheets, names_of_dataframes, function(x,y) writeData(workbook, x, y))