【发布时间】:2019-06-25 21:14:03
【问题描述】:
我是 R 新手,我正在尝试将数据保存到 xlsx 文件。我正在使用 writexl(xlsx 引起了麻烦)。
当我尝试使用 write_xlsx 时,似乎在我的数据框中包含字符串和整数会导致问题。
我在这里重现了这个问题:
library(writexl)
matrix <- matrix(1,2,2)
block <- cbind(list("ones","more ones"),matrix)
df <- data.frame(block)
data = list("sheet1"=df)
write_xlsx(data, path = "data.xlsx", col_names = FALSE, format_headers = FALSE)
文件 data.xlsx 正确包含“sheet1”,但它是空白的。我愿意
一个 1 1
更多 1 1
有什么方法可以使用 write_xlsx 获得此输出?
【问题讨论】:
-
问题更可能是您正在创建格式错误的数据框。您是否知道
df中的每一列实际上是一个列表,而不是一个向量?实际上,即使您的矩阵也是列表矩阵。试试df <- data.frame(a = c("ones","more ones"),b = c(1,1),c = c(1,1))。尝试使用matrix和cbind或rbind而不是仅使用data.frame创建数据框可能会出错。 -
好的,很高兴知道。是否有一种可接受的方式将现有矩阵和列表合并到数据框中,还是我必须逐个列表构建它? (我也有一个列名列表,因此将所有内容分开以重新构建它会有点不方便。)
-
好吧,除非数据类型实际上不同,否则避免使用列表会更安全。如果你有列名,这些都是字符,真的没有理由使用
list()而不仅仅是c()。但是,如果您要使用cbind或rbind构建数据帧,则需要始终检查您是否得到了您的想法,而永远不要假设 R 会神奇地将所有内容强制转换为您天真的假设。