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))