在R中导出数据帧并保留类型

时间:2012-02-24 14:54:33

标签: r

我正在寻找一对R命令,它们将数据帧转储到磁盘,并且能够从转储中重新创建相同的数据帧。

我认为write.table是导出/导入的事实,但在以下示例中失败,因为它不保留列的类型:

df = data.frame('foo' = 'bar')
df$foo = as.character(df$foo)

typeof(df$foo)
# = "character"

write.table(df,'~/df.rdata')
df2 = read.table('~/df.rdata')

typeof(df2$foo)
# = "integer"

3 个答案:

答案 0 :(得分:2)

dputsave(objects, file="foo.RData")都保留了列类型。带save的Rdata对象可能是最明智的选择,可以重新加载:load("foo.RData")

答案 1 :(得分:2)

使用功能saveload

save(df, file="filename.rdata")

然后再次加载:

load("filename.rdata")

答案 2 :(得分:2)

正如@TylerRinker所说,dputsave可能是最合适的。

...但saveload有时会让save要保存的对象的名称有点不方便,然后{ {1}}将对象加载回这些名称。

替代方案是loadsaveRDS(是的,命名有点奇怪!)。它们更低级并保存单个对象:

readRDS

另请注意在创建数据框时使用df <- data.frame(foo = 'bar', stringsAsFactors=FALSE) saveRDS(df, file='foo.rds') df2 <- readRDS('foo.rds') identical(df, df2) ...