gpt4 book ai didi

r - 在 R 中使用 openxlsx 时避免 Excel 隐式交集运算符

转载 作者:行者123 更新时间:2023-12-04 17:10:29 26 4
gpt4 key购买 nike

我正在使用 R 中的 openxlsx 包制作一个 Excel 工作表,稍后每天向其中添加一行数据。

我在使用 ISERROR 和 STDEV.P 时遇到公式问题,而不仅仅是 AVERAGE、MIN 或 MAX。 Excel 正在向我的公式中添加隐式交集运算符 (@)。我删除了我的 ISERROR 代码,但我仍然遇到 STDEV.P 的问题

创建工作簿 wb 并将标题放入其中后,我的代码简化为:

formula1 <- "AVERAGE(E2:E32)"
formula2 <- "AVERAGE(IF(ISERROR(E2:E32),"",E2:E32))"
formula3 <- "STDEV.P(IF(ISERROR(E2:E32),"",E2:E32))"
formula4 <- "STDEV.P(E2:E34)"
writeFormula(wb, 1, x=formula1, startCol = 5, startRow = 34)
writeFormula(wb, 1, x=formula2, startCol = 5, startRow = 35)
writeFormula(wb, 1, x=formula3, startCol = 5, startRow = 36)
writeFormula(wb, 1, x=formula4, startCol = 5, startRow = 37)
writeFormula(wb, 1, x=formula5, startCol = 5, startRow = 38)
saveWorkbook(wb, file = "Log.xlsx", overwrite = TRUE)

这是 Excel 对我的公式所做的:

formula1
What in R is the string: AVERAGE(E2:E32)
What Excel shows: =AVERAGE(E2:E32) ok; works

formula2
What in R is the string: AVERAGE(IF(ISERROR(E2:E32),"",E2:E32))
What Excel shows: =AVERAGE(IF(ISERROR(@E2:E32),"",E2:E32)) value error in Excel

formula3
What in R is the string: STDEV.P(IF(ISERROR(E2:E32),"",E2:E32))
What Excel shows: =@STDEV.P(IF(ISERROR(@E2:E32),"",E2:E32)) name error in Excel

formula4
What in R is the string: STDEV.P(E2:E34)
What Excel shows: =@STDEV.P(E2:E34) Name error in Excel

添加了 @ 的每个公式在 Excel 中都不起作用,无论我在 E2:E34 中是否有数据。使用 STDEV.P 的公式出现 ?NAME 错误,其他公式出现值错误。

有人知道怎么解决吗?有什么我可以添加到我的 R 代码中以强制 Excel 停止添加这些 @ 吗?有没有什么方法可以更改我在 R 中的公式字符串,以便 Excel 不会出错?

感谢您提供的任何帮助。

最佳答案

我无法复制 Excel 错误以在 Excel 公式中显示 @,但您使用公式 AVERAGE(IF (ISERROR(E2:E32),"",E2:E32)) 是因为 ISERROR 需要单元格输入而不是范围。因此,如果您将其更改为 AVERAGE(IF(ISERROR(E2),"",E2:E32)) 那么这应该可以工作。

还要确保将开头和结尾的双引号 " 替换为单个 '。这是必需的,因为在您的 Excel 公式中,您使用的是 " 和 R 会认为这是字符串 " 的结尾。

如果您使用的是包含 . 的 Excel 函数,那么您的公式应以 _xlfn. 开头,因此要使用 STDEV.P,这应该是 _xlfn.STDEV.P(E2:E34)

library(openxlsx)
wb <- createWorkbook()
addWorksheet(wb, "1")

# This works
formula1 <- "AVERAGE(E2:E32)"

# This won't work (note it begins with a single ')
formula2 <- 'AVERAGE(IF(ISERROR(E2:E32),"",E2:E32))'

# This should work
formula3 <- 'AVERAGE(IF(ISERROR(E2),"",E2:E32))'

# This won't work
formula4 <- 'STDEV.P(IF(ISERROR(E2:E32),"",E2:E32))'
formula5 <- "STDEV.P(E2:E34)"

# This should work. For a Excel functions with . start with _xlfn
formula6 <- "_xlfn.STDEV.P(E2:E34)"

writeData(wb, 1, 1:30, startRow = 2, startCol = 5)
writeFormula(wb, 1, x=formula1, startCol = 5, startRow = 34)
writeFormula(wb, 1, x=formula2, startCol = 5, startRow = 35)
writeFormula(wb, 1, x=formula3, startCol = 5, startRow = 36)
writeFormula(wb, 1, x=formula4, startCol = 5, startRow = 37)
writeFormula(wb, 1, x=formula5, startCol = 5, startRow = 38)
writeFormula(wb, 1, x=formula6, startCol = 5, startRow = 39)
saveWorkbook(wb, file = "Log.xlsx", overwrite = TRUE)

关于r - 在 R 中使用 openxlsx 时避免 Excel 隐式交集运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69564335/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com