Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/81.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-cloud-platform/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
openxlsx::writeFormula行方式-有没有一种有效的方法可以做到这一点?_R_Formula_Openxlsx_Rowwise - Fatal编程技术网

openxlsx::writeFormula行方式-有没有一种有效的方法可以做到这一点?

openxlsx::writeFormula行方式-有没有一种有效的方法可以做到这一点?,r,formula,openxlsx,rowwise,R,Formula,Openxlsx,Rowwise,openxlsx编写公式的函数似乎只按列添加公式 是否有一种有效的方法按行编写公式 通过一个可复制的示例来说明问题: df <- data.frame(a = 1:3, b = 4:6, c = 7:9) # create workbook, worksheet and write data to worksheet wb <- createWorkbook() addWorksheet(wb, "She

openxlsx
编写公式的函数似乎只按列添加公式

是否有一种有效的方法按行编写公式

通过一个可复制的示例来说明问题:

df <- data.frame(a = 1:3,
                 b = 4:6,
                 c = 7:9)

# create workbook, worksheet and write data to worksheet
wb <- createWorkbook()
addWorksheet(wb, "Sheet 1")
writeData(wb, "Sheet 1", x = df)

#  formula to be added rowwise to cells A5:C5
f <- c("SUM(A2:A4)", "SUM(B2:B4)", "SUM(C2:C4)")

# Using the openxlsx function results in columnwise addition of the formula vector: 
writeFormula(wb, sheet = 1, x = f, startCol = 1, startRow = 5)

saveWorkbook(wb, "rowwise_writeFormula.xlsx", overwrite = TRUE)

这提供了我想要的内容,但对于数百列来说,这不是一种可行的方法

使用purrr::pwalk可以将其封装在函数中,这是一个改进:

formula_inputs <- list(formula = f,
                       start_col = 1:3,
                       start_row = rep(5, 3))

purrr::pwalk(formula_inputs, function(formula, start_col, start_row) writeFormula(wb, sheet = 1, x = formula, startCol = start_col, startRow = start_row))


formula\u输入为什么不干脆
f我很乐意!但是工作簿必须由公式填充,因为excel用户将使用数据,他们希望更改输入以查看这对总数的影响;虽然对于MRE,我使用了sum(),但在实际的工作簿中,有更复杂的公式显示了变化,例如通货膨胀。工作簿需要动态/响应:总计和小计需要响应输入更改。在我看来,您应该有一个工作簿模板,其中嵌入公式,然后将r输出写入模板副本。有意义吗?这是一个有趣的想法,但是,在MRE之外的现实世界中,列表中的每个数据帧都有不同的行数,从数万到数千不等,不仅它们不同,而且随着项目的发展,行数可能会发生变化。因此,我渴望开发一个尽可能多的编程解决方案,避免直接在excel中工作。我不确定这是否可行,可能可用的最佳选择是按照上述方法使用
apply
family或
purr
。还有一篇关于这个的帖子,你为什么不干脆
f我很乐意!但是工作簿必须由公式填充,因为excel用户将使用数据,他们希望更改输入以查看这对总数的影响;虽然对于MRE,我使用了sum(),但在实际的工作簿中,有更复杂的公式显示了变化,例如通货膨胀。工作簿需要动态/响应:总计和小计需要响应输入更改。在我看来,您应该有一个工作簿模板,其中嵌入公式,然后将r输出写入模板副本。有意义吗?这是一个有趣的想法,但是,在MRE之外的现实世界中,列表中的每个数据帧都有不同的行数,从数万到数千不等,不仅它们不同,而且随着项目的发展,行数可能会发生变化。因此,我渴望开发一个尽可能多的编程解决方案,避免直接在excel中工作。我不确定这是否可行,可能可用的最佳选择是按照上述方法使用
apply
family或
purr
。这上面还有一个帖子
formula_inputs <- list(formula = f,
                       start_col = 1:3,
                       start_row = rep(5, 3))

purrr::pwalk(formula_inputs, function(formula, start_col, start_row) writeFormula(wb, sheet = 1, x = formula, startCol = start_col, startRow = start_row))