我使用.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
答案 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”。