Magrittr 转发管道无法将值转发到 openXL::addWorksheet - "Error ...: First argument must be a Workbook"
Magrittr forward pipe fails to forward values into openXL::addWorksheet - "Error ...: First argument must be a Workbook"
magrittr
似乎无法将 'workbook' class 对象从包 openxlsx
传送到 addWorkbook
函数。
(没关系为什么我需要使用 excel...好吧)
例如,以 'base' 语法将 InsectSprays
数据集写入 excel 文件:
library("openxlsx")
insect.wb <- createWorkbook()
addWorksheet(wb = insect.wb,
sheetName = "Insect Spray")
writeData(wb = insect.wb,
sheet = "Insect Spray",
x= InsectSprays)
openXL(insect.wb)
打开包含数据的临时 excel 文件。
所以magrittr
应该
但是例如
library("openxlsx")
library("magrittr")
insect.wb <- createWorkbook()
insect.wb %>%
addWorksheet(sheetName = "Insect Spray") %>%
writeData(sheet = "Insect Spray",
x= InsectSprays)
Returns
Error in writeData(., sheet = "Insect Spray", x = InsectSprays) :
First argument must be a Workbook.
但是insect.wb
是一个工作簿对象:
> insect.wb <- createWorkbook()
> class(insect.wb)
[1] "Workbook"
attr(,"package")
[1] "openxlsx"
这表明问题是对象没有通过管道输入...
我是在搞错语法,还是有更有趣的解释来解释失败的原因?
有趣的是,前向管道和 writeData
没有问题——如果我们将前向管道的使用转移到 addWorksheet
之后,它也可以正常工作:
insect.wb <- createWorkbook()
addWorksheet(wb = insect.wb,
sheetName = "Insect Spray")
insect.wb %>%
writeData(sheet = "Insect Spray",
x= InsectSprays)
openXL(insect.wb)
在您的命令链中,writeData 将 insect.wb %>% addWorksheet(sheetName = "Insect Spray")
的输出作为第一个输入
addWorksheet 直接修改对象,而不是 return 对象,因此无论您传递给 writeData 什么都不是工作表(根据您的评论,它可能是添加后的工作表数) .
您可以使用运算符 %T>%
并写入
insect.wb %T>%
addWorksheet(sheetName = "Insect Spray") %>%
writeData(sheet = "Insect Spray", x= InsectSprays)
%T>%
在 rhs 的输出不是 returned 而 lhs 是 returned 的意义上开始一个新的链,然后 writeData 将它带到 %T>%
离开了,只是 insect.wb
现在已经被 addWorksheet
修改了。
magrittr
似乎无法将 'workbook' class 对象从包 openxlsx
传送到 addWorkbook
函数。
(没关系为什么我需要使用 excel...好吧)
例如,以 'base' 语法将 InsectSprays
数据集写入 excel 文件:
library("openxlsx")
insect.wb <- createWorkbook()
addWorksheet(wb = insect.wb,
sheetName = "Insect Spray")
writeData(wb = insect.wb,
sheet = "Insect Spray",
x= InsectSprays)
openXL(insect.wb)
打开包含数据的临时 excel 文件。
所以magrittr
应该
但是例如
library("openxlsx")
library("magrittr")
insect.wb <- createWorkbook()
insect.wb %>%
addWorksheet(sheetName = "Insect Spray") %>%
writeData(sheet = "Insect Spray",
x= InsectSprays)
Returns
Error in writeData(., sheet = "Insect Spray", x = InsectSprays) : First argument must be a Workbook.
但是insect.wb
是一个工作簿对象:
> insect.wb <- createWorkbook()
> class(insect.wb)
[1] "Workbook"
attr(,"package")
[1] "openxlsx"
这表明问题是对象没有通过管道输入...
我是在搞错语法,还是有更有趣的解释来解释失败的原因?
有趣的是,前向管道和 writeData
没有问题——如果我们将前向管道的使用转移到 addWorksheet
之后,它也可以正常工作:
insect.wb <- createWorkbook()
addWorksheet(wb = insect.wb,
sheetName = "Insect Spray")
insect.wb %>%
writeData(sheet = "Insect Spray",
x= InsectSprays)
openXL(insect.wb)
在您的命令链中,writeData 将 insect.wb %>% addWorksheet(sheetName = "Insect Spray")
addWorksheet 直接修改对象,而不是 return 对象,因此无论您传递给 writeData 什么都不是工作表(根据您的评论,它可能是添加后的工作表数) .
您可以使用运算符 %T>%
并写入
insect.wb %T>%
addWorksheet(sheetName = "Insect Spray") %>%
writeData(sheet = "Insect Spray", x= InsectSprays)
%T>%
在 rhs 的输出不是 returned 而 lhs 是 returned 的意义上开始一个新的链,然后 writeData 将它带到 %T>%
离开了,只是 insect.wb
现在已经被 addWorksheet
修改了。