首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

R语言 Again—新发现

我就在这里等你关注,不离不弃

——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,明天见!

学习数据挖掘交流平台

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180110G0RDUJ00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券