`write.dbf`失败,类为`tbl_df`

时间:2015-08-29 14:07:20

标签: r dplyr

我使用.dbf文件以及dplyr执行了大量工作。 write.dbf()中存在一个错误,阻止将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

2 个答案:

答案 0 :(得分:4)

此处的解决方案是强制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

我已经向foreign人提交了一份错误报告,但希望此帖可以为其他人带来一些痛苦。

答案 1 :(得分:3)

我不确定在foreign中声明错误是否公平。考虑一下:

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?!

R中有许多函数使用,例如mode(my.data.frame[,"mycolumn"])来测试数据帧中列的模式,但是使用tbl_df对象时,返回的模式是“list”。