我已閱讀 [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 中完成),它迭代兩個串列/向量:
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]:使用基數 R 遍歷多個串列 [2]:R 回圈遍歷兩個串列
uj5u.com熱心網友回復:
我認為您可能想要使用list()而不是c()收集您的資料框。
后者將獲取資料幀的所有列并將它們作為獨立元素放在串列中(這就是為什么會出現長度不一致的錯誤),而前者將它們保留為單獨的元素。然后map2應該為同時迭代作業。
看起來writeData將作業簿作為第一個元素,目前您的 map2 呼叫會將其用作第三個元素,所以也許您想將其重寫為
map2(names_of_worksheets, names_of_dataframes, function(x,y) writeData(workbook, x, y))
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/327659.html
