xlsx::write.xlsx() 在 2+ 行且 row.names = F 参数的 tibble 上崩溃

问题描述 投票:0回答:1

当我在 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
    

enter image description here

第二个选项 如果我只从 tibble 中提取一行,脚本将完全按预期执行。

xlsx::write.xlsx(df[1, ], file = "myfilename.xlsx", row.names = F)

enter image description here

第三个选项 如果我将数据转换为数据帧,它执行时不会出错,但由于 data.frame 限制而修改列名称:

xlsx::write.xlsx(data.frame(df), file = "myfilename.xlsx", row.names = F)

enter image description here

这是

xlsx::write.xlsx()
中的一个错误还是我可以用它做点什么?

r tibble r-xlsx
1个回答
0
投票

发生这种情况是因为你通过应用

data.frame
来强制
df
你的
data.frame
对象已经是
data.frame(df)
了。当您这样做时,
data.frame
函数会执行自动(在您的情况下不需要)名称更正过程。

解决方案:直接将

df
作为第一个参数。

© www.soinside.com 2019 - 2024. All rights reserved.