`write.dbf`与类为'tbl_df'的对象一起失败`
我用`write.dbf`与类为'tbl_df'的对象一起失败`,r,dplyr,R,Dplyr,我用.dbf文件以及dplyr做了很多工作。write.dbf()中有一个bug,它阻止将tbl_df对象写入.dbf文件 不幸的是,错误消息写得很糟糕,因此很难准确地知道发生了什么 这是一个MWE library(dplyr) library(foreign) d <- data_frame( x = 1:4, y = rnorm(4) ) write.dbf(d, "test.dbf") Error in write.dbf(d, "test.dbf") : unknown co
.dbf
文件以及dplyr
做了很多工作。write.dbf()
中有一个bug,它阻止将tbl_df
对象写入.dbf
文件
不幸的是,错误消息写得很糟糕,因此很难准确地知道发生了什么
这是一个MWE
library(dplyr)
library(foreign)
d <- data_frame( x = 1:4, y = rnorm(4) )
write.dbf(d, "test.dbf")
Error in write.dbf(d, "test.dbf") : unknown column type in data frame
库(dplyr)
图书馆(外文)
d这里的解决方案是将d
类强制为裸data.frame
class(d)
[1] "tbl_df" "tbl" "data.frame"
df <- as.data.frame(d)
class(df)
[1] "data.frame"
write.dbf(as.data.frame(df), "test.dbf") # works
类别(d)
[1] “tbl_df”“tbl”“数据帧”
df我不确定在foreign
中断言一个bug是否公平。考虑这一点:
library(dplyr)
df <- data.frame(x=1:10, y=11:20)
class(df)
# [1] "data.frame"
mode(df$x) # as expected
# [1] "numeric"
mode(df[,"x"]) # as expected
# [1] "numeric"
dp <- data_frame(x=1:10, y=11:20)
class(dp)
# [1] "tbl_df" "tbl" "data.frame"
mode(dp$x)
# [1] "numeric" # as expected
mode(dp[,"x"])
# [1] "list" # WTF?!
库(dplyr)
奇怪的是,这些东西是如何分组的。显示了完全相同的问题。我想我认为错误不一定是因为write.dbf()
不能处理所有类型的对象,而是dplyr
正在被广泛使用,错误消息难以理解。只要他们更改了错误消息,我就对功能感到满意。嗯,这有点哲学性,但我认为问题在于dplyr
。在测试列的模式时,所谓的“data_frame”返回“list”,这是不合理的。它会破坏大量函数/包中的代码。write.dbf(tbl_dt(d),“test.dbf”)
对您有用吗?事实上,我通常通过使用write.dbf(as.data.frame(d),“test.dbf”)
来解决这个问题,尽管您的速度可能更快。