当我在 2+ 行的 tibble 上调用
xlsx::write.xlsx()
时,它崩溃了:
df <- structure(list(`region name` = c("Reg 1", "Reg 2"),
`value` = c(1.38755717255717, 1.26297588082289)),
row.names = c(NA, -2L),
class = c("tbl_df", "tbl", "data.frame"))
xlsx::write.xlsx(df, file = "myfilename.xlsx", row.names = F)
并返回:
Error in if (is.na(value)) { : the condition has length > 1
第一个选项 如果我调用相同的脚本设置默认值
row.names = T
,它会正确执行,但会添加一个不需要的列和行号。
xlsx::write.xlsx(df, file = "myfilename.xlsx",
row.names = T) # I can skip the parameter
第二个选项 如果我只从 tibble 中提取一行,脚本将完全按预期执行。
xlsx::write.xlsx(df[1, ], file = "myfilename.xlsx", row.names = F)
第三个选项 如果我将数据转换为数据帧,它执行时不会出错,但由于 data.frame 限制而修改列名称:
xlsx::write.xlsx(data.frame(df), file = "myfilename.xlsx", row.names = F)
这是
xlsx::write.xlsx()
中的一个错误还是我可以用它做点什么?
发生这种情况是因为你通过应用
data.frame
来强制 df
你的 data.frame
对象已经是 data.frame(df)
了。当您这样做时,data.frame
函数会执行自动(在您的情况下不需要)名称更正过程。
解决方案:直接将
df
作为第一个参数。