`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”)
来解决这个问题,尽管您的速度可能更快。