io包:R对象输入输出

io包:R对象输入输出

该包的参考文档位于:io文档。看到这个包我才意识到自己过去使用R的方法是非常错误的。在使用Stata的时候,我们会经常把数据保存成dta文件,但是使用R的时候很少去使用R的专有格式文件rds文件。实际上rds才是保存R对象的最好办法,而且非常强大的地方在于,它可以完美的保存任何R对象,不像dta文件只能保存数据集文件。

所以以后要好好改掉这个坏习惯了,不需要其它软件协同使用的时候就应该使用rds格式保存R对象,而io包提供了输入输出R对象的快捷方式。

安装

R
1
install.packages("io")

qwrite():保存R对象到文件

R
1
2
3
4
library(io)
data(cars)
# 保存为rds文件
qwrite(cars, "cars.rds")

qread():读取文件为R对象

R
1
2
cars_rds <- qread("cars.rds")
cars_csv <- qread("cars.csv")

区别

R
1
2
3
4
> identical(cars_rds, cars)
[1] TRUE
> identical(cars_csv, cars)
[1] FALSE

也就是说,rds文件完美的保存了数据框,而csv文件并没有。

R
1
2
3
4
5
6
7
8
9
10
11
12
13
14
> str(cars)
'data.frame': 50 obs. of 2 variables:
$ speed: num 4 4 7 7 8 9 10 10 10 11 ...
$ dist : num 2 10 4 22 16 10 18 26 34 17 ...

> str(cars_csv)
'data.frame': 50 obs. of 2 variables:
$ speed: int 4 4 7 7 8 9 10 10 10 11 ...
$ dist : int 2 10 4 22 16 10 18 26 34 17 ...

> str(cars_rds)
'data.frame': 50 obs. of 2 variables:
$ speed: num 4 4 7 7 8 9 10 10 10 11 ...
$ dist : num 2 10 4 22 16 10 18 26 34 17 ...

也就是说,csv文件读取之后数据被读成int型,而不再是num型。

list_files():列示目录中的文件

默认路径为工作目录。

R
1
2
3
4
> list_files()
[1] "封面图片链接.do" "cars.csv" "cars.json"
[4] "cars.rds" "cars.yaml" "filenameregular.ado"
[7] "io.R"

qdraw():绘制和保存图表

R
1
2
3
4
5
plot_cars <- function() plot(dist ~ speed, cars)
qdraw(plot_cars())
qdraw(plot_cars(), "cars.pdf")
qdraw(plot_cars(), "cars.png")
qdraw(plot_cars(), "cars.svg")

注意rds不光是保存R数据框,而是可以保存任意R对象,例如,gg对象:

R
1
2
3
4
5
library(ggplot2)
library(ggthemes)
p <- qplot(x = carat, y = price, data = diamonds, colour = I("#FC4A1A")) + theme_igray(base_size = 15, base_family = "FiraSans-Regular")
qwrite(p, "ggplot.rds")
(q <- qread("ggplot.rds"))

# R

评论

程振兴

程振兴 @czxa.top
截止今天,我已经在本博客上写了659.4k个字了!

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×