我就在这里等你关注,不离不弃
——A·May
R-53T-66
「从头再来新发现
」
1.内存对象的问题
长时间的使用Rstudio,有没有发现最近它的运行速度变慢了?你又是不是每次用完R都会时不时的点下Save,保存一下今天的操作。如果,你发现你的Rstudio的运行速度变慢了,那就说明你该清理一下它的内存对象了,就像平时我们运行的赋值的对象都存在那里,时间长了每次R运行的时候都要读取,自然运行的速度会变慢,所以是时候来次清洗了。
清洗内存对象
> ls()
[1] "al" "data" "eee" "hy" "mtcars" "myconn"
[7] "USArrests"
#以上就是我们运行在内存中的对象
> rm(list = ls())
#进行清洗
> ls()
character(0)
#全部消失
一般而言,May的写算法的习惯都是放到脚本中,因为完事好保存。其实,在Console的对话框中也能实现这个功能,我们可以把运行的对象保存到二进制的文件中,这种文件的格式为.RData,而我们的脚本的格式为.R,这里两者还是有区别的。
保存二进制内存对象
> a
> b
> c
> c
a b
[1,] 1 1
[2,] 1 1
[3,] 12 1
[4,] 3 1
#变出a,b,c三个对象
> ls()
[1] "a" "b" "c" "eee"
#ls()查看内存中的对象,发现还有eee
> rm(eee)
#用rm删去eee
> ls()
[1] "a" "b" "c"
> save(list = ls(),file = "au.RData")
#保存内存中的现有对象a,b,c
> rm(list=ls())
#再次清除内存对象
> ls()
character(0)
#什么都没剩下
> a
Error: object 'a' not found
#发现出现错误
> load("au.RData")
#再加载保存的二进制文件
> a
[1] 1 1 12 3
> b
[1] 1 1 1 1
#发现都回来了
最后一个问题,我们的二进制的文件保存在哪里呢?请打开你的默认R的保存地址,你会发现这个文件的,不过请注意,这里只是保存了二进制对象,而不是编码,所以请记住你保存的对象的名称是什么,如果忘了那就不好玩了,不过你有没有发现,这是一种储存秘密的好方式。
2.关于row.names的问题
如上图,第一列的变量名是空的,而且实际运算中这个数据集的第一列不是这些车的名字,而是mpg。不信就看下面:
> mtcars[,1]
[1] 21.0 21.0 22.8 21.4 18.7 18.1 14.3 24.4 22.8 19.2 17.8 16.4 17.3 15.2 10.4 10.4
[17] 14.7 32.4 30.4 33.9 21.5 15.5 15.2 13.3 19.2 27.3 26.0 30.4 15.8 19.7 15.0 21.4
其实,第一列的变量名是有的,就是row.names,这是一个标记符,用fix()是可以查看到的,但是不能对这个row.names做修改。
那么问题来了,如果我们想要第一列该怎么办?那就下面的编码!
改变row.names列
> mtcar
> row.names(mtcar)
> head(mtcar)
3.attach使用出现提示的问题
> mpg
> head(mtcars)
> attach(mtcars)
The following object is masked _by_ .GlobalEnv:
mpg
The following objects are masked from mtcars (pos = 4):
am, carb, cyl, disp, drat, gear, hp, mpg, qsec, vs, wt
我经常使用的attach()函数,用来减少$的使用,为了省事,有时候经常出现上面的这个following的提示,原来是忽略了书中的提示,因为R在浏览内存中的对象中还存在一个mpg对象,所以提醒了我有一个mpg的变量是重复的。
关于这个问题,我还会决定以后换用with(data,{ })的方式或者是直接用$,毕竟这样能减少错误发生。
4.R语言与SQL的连接问题
既然SQL的学习已经开始,那么为什么还不赶紧将两者放在一起呢?请看下面的过程:
> library("RODBC")
> myconn
> #创建与SQL之间的连接myconn;MR是数据源,如果没有需要创建;后者是登陆名和密码
> head(sqlTables(myconn))
> #查看服务器中的表
> hy
> #读取服务器中的表hy,引号是重点,不能没有
> sqlQuery(myconn,"select * from hy")
> #编写SQL查询语句,与sqldf有异曲同工之妙
> data(USArrests)
> sqlSave(myconn,USArrests,rownames = "state",addPK = TRUE)
> #把第一列的名称改为state,并保存,此时进入数据库可看到表格
> close(myconn)
> #关闭连接
「结语
」
越学越发现,自己需要的还有很多,可惜时间越来越少了,不过庆幸的是我想我发现了我喜欢做的事。
我是May,明天见!
学习数据挖掘交流平台
领取专属 10元无门槛券
私享最新 技术干货