交互式使用 R题(shell)

交互式使用 R

交互式shell是一种很方便的环境,可以进行各种尝试,随时调整过程。与Python、Ruby等语言一样,R也提供了shell环境。本文开始的例子就是以交互的方式使用R。当打开R控制台时,R会显示命令提示符”>”,此时可以输入命令。 下面是交互式使用R的几个例子:

例一:

help.start() #启动在线帮助,会打开浏览器。
x <- rnorm(50); y <- rnorm(x)  #产生两个随机向量x和y
plot(x,y) #使用x,y画二维散点图, 会打开一个图形窗口
ls() #查看当前工作空间里面的 R 对象
rm(x,y) #清除x,y对象
x <- 1:20  # 相当于x=(1,2,…,20)

例二:

x <- 1:20#等价于 x = (1, 2, ..., 20)。 
w <- 1 + sqrt(x)/2#标准差的`权重'向量。 
dummy <- data.frame(x=x, y= x + rnorm(x)*w)#创建一个由x 和 y构成的双列数据框
dummy #查看dummy对象中的数据。 
fm <- lm(y ~ x, data=dummy)#拟合 y 对 x 的简单线性回归
summary(fm)#查看分析结果。 
fm1 <- lm(y ~ x, data=dummy, weight=1/w^2)#加权回归
summary(fm1)#查看分析结果。

attach(dummy)#让数据框中的列项可以像一般的变量那样使用。 
lrf <- lowess(x, y)#做一个非参局部回归。 
plot(x, y)#标准散点图。 
lines(x, lrf$y)#增加局部回归曲线。 
abline(0, 1, lty=3)#真正的回归曲线:(截距 0,斜率 1)。 
abline(coef(fm))#无权重回归曲线。 
abline(coef(fm1), col = "red")#加权回归曲线。 

detach()#将数据框从搜索路径中去除。 

plot(fitted(fm), resid(fm),
     xlab="Fitted values",
     ylab="Residuals",
     main="Residuals vs Fitted")  #显示一个检验异方差性(heteroscedasticity)的标准回归诊断图。 

qqnorm(resid(fm), main="Residuals Rankit Plot")#用正态分值图检验数据的偏度(skewness),峰度(kurtosis)和异常值(outlier)。

rm(fm, fm1, lrf, x, dummy)#再次清空。

例三: Michaelson 和 Morley 测量光速的经典实验

filepath <- system.file("data", "morley.tab" , package="datasets")#从对象 morley 中得到实验数据的文件路径
filepath#查看文件路径
file.show(filepath)#查看文件内容
mm <- read.table(filepath)#以数据框的形式读取数据
mm$Expt <- factor(mm$Expt)
mm$Run <- factor(mm$Run)#将 Expt 和 Run 改为因子。 
attach(mm)#让数据在位置 3 (默认) 可见(即可以直接访问)。 
plot(Expt, Speed, main="Speed of Light Data", xlab="Experiment No.")#用简单的盒状图比较五次实验。 
fm <- aov(Speed ~ Run + Expt, data=mm)#分析随机区组,`runs' 和 `experiments' 作为因子。 
summary(fm)

fm0 <- update(fm, . ~ . - Run)
anova(fm0, fm)#拟合忽略 `runs' 的子模型,并且对模型更改前后进行方差分析。 
detach()
rm(fm, fm0)#在进行下面工作前,清空数据。

#下面是等高线和影像显示的示例
x <- seq(-pi, pi, len=50)#x 是一个在区间 [-pi\, pi] 内等间距的50个元素的向量
y <- x
f <- outer(x, y, function(x, y) cos(y)/(1 + x^2))#f 是一个方阵,行列分别被 x 和 y 索引,对应的值是函数 cos(y)/(1 + x^2) 的结果。 
oldpar <- par(no.readonly = TRUE)
par(pty="s")#保存图形参数,设定图形区域为“正方形”。 
contour(x, y, f)
contour(x, y, f, nlevels=15, add=TRUE)#绘制 f 的等高线;增加一些曲线显示细节。 
fa <- (f-t(f))/2#fa 是 f 的“非对称部分”(t() 是转置函数)。 
contour(x, y, fa, nlevels=15)#画等高线
par(oldpar)# 恢复原始的图形参数
image(x, y, f)
image(x, y, fa)#绘制一些高密度的影像显示
objects(); 
rm(x, y, f, fa)#在继续下一步前,清空数据。

th <- seq(-pi, pi, len=100)
z <- exp(1i*th)#1i 表示复数 i

par(pty="s")
plot(z, type="l")#图形参数是复数时,表示虚部对实部画图。这可能是一个圆。 
w <- rnorm(100) + rnorm(100)*1i#假定我们想在这个圆里面随机抽样。一种方法将让复数的虚部和实部值是标准正态随机数 ... 
w <- ifelse(Mod(w) > 1, 1/w, w)#将圆外的点映射成它们的倒数。 
plot(w, xlim=c(-1,1), ylim=c(-1,1), pch="+",xlab="x", ylab="y")
lines(z)#所有的点都在圆中,但分布不是均匀的。 

#下面采用均匀分布。现在圆盘中的点看上去均匀多了。 
w <- sqrt(runif(100))*exp(2*pi*runif(100)*1i)
plot(w, xlim=c(-1,1), ylim=c(-1,1), pch="+", xlab="x", ylab="y")
lines(z)

rm(th, w, z)#再次清空。 
q()#离开 R 程序

工作空间(workspace)

R shell 可以任意地保存一个完整的环境,称为工作空间(workspace)。前面的例子中,运行q()命令退出R时,会被询问是否要保存工作空间:

工作空间(workspace)保存了一些环境信息。每次与R的会话(session)可以从一个全新的环境开始,也可以在原来的基础上继续,这些运行信息就保存在工作空间中。 如果在UNIX系统以命令行的方式启动R,则当前目录就是本次会话的工作空间:

mkdir r_test
cd r_test/
R

看看R能为工作空间保存些什么内容:

> x <- rnorm(50); y <- rnorm(x)  #产生两个随机向量x和y
> q()
Save workspace image? [y/n/c]: y

如果运行ls -Al,会发现R保存了两个隐藏文件:.RData和.Rhistory。 其中RData以二进制的方式保存了会话中的变量值,Rhistory以文本文件的方式保存了会话中的所有命令。

如果在一个已有的工作空间中启动R,会提示: 原来保存的工作空间已还原

此时可以用函数ls()history()看到之前保存的数据和命令。 使用rm()remove()可以删除工作空间中的变量。

在R控制台,也可以使用函数getwd()和setwd()来获取/设置工作空间目录;使用list.files()查看当前目录下的文件。

如果以GUI方式运行R控制台,可以通过菜单来加载或保存工作空间。

脚本/批处理

前面提到R可以在工作空间中保存历史命令。其实这就是一个工作空间中的默认脚本,当加载工作空间时自动执行。

我们完全可以写自己的脚本,指定R批量执行一些命令。通常,自己的脚本会以“.R”作为扩展名。一个最简单的例子test.R:

x <- rnorm(50); y <- rnorm(x)  #产生两个随机向量x和y
plot(x,y) #使用x,y画二维散点图, 会打开一个图形窗口

并保存到工作空间,然后在R控制台,使用命令source('test.R')就可以执行该脚本, 还可以使用source('test.R', echo=TRUE)输出更详细的信息。

编写脚本自动执行一些任务时,sink()函数会比较有用。 sink("record.lis")会把所有后续的输出结果从控制台重定向到外部文件 record.lis 中,此时控制台中看不到命令输出的结果。 使用命令sink()可以让输出流重新定向到控制台。

帮助系统

GNU软件通常都会有非常好的帮助系统,无论对于初学者还是熟练者都能带来很大的帮助。R当然也不例外。R中提供的帮助主要有以下几种:

文档和搜索

help.start() 命令会打开浏览器,显示帮助文档。包括一些入门的文档,以及搜索功能

演示

demo()会按照包分组,列出所有可用的演示:

按照名称可以开始演示,比如demo(is.things)

函数帮助

如果已经知道一个函数的名称(比如solve),需要了解其所属的包、用途、用法、参数说明、返回值、参考文献、相关函数以及范例等,可以使用命令 help(solve)?solve。该命令会弹出一个窗口:

函数示例

对于函数,还可以使用example()执行示例,比如example(solve)

关键字和运算符

与函数的帮助类似,但是需要加上引号,如:

? '[['   # 等价于 help('[[')
?'+'    #等价于 help('+')
?'if'    #等价于 help('if')

搜索

如果不知道函数名称,还可以进行搜索,比如:

??'analysis'  #等价于 search('analysis')

官方搜索

前面的帮助都受限于本地环境已经安装的包。如果要搜索R中所有的资源(包,函数、数学方法等),需要在R的官方网站搜索

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏我是攻城师

关于线程死锁问题

死锁是多线程编程里面非常常见的一个问题,作为一个中高级开发者是必须掌握的内容,今天我们来学习一下死锁相关的知识。

1276
来自专栏IT杂记

关于JVM CPU资源占用过高的问题排查

一、背景:     先执行一个java程序里面开了两个线程分别都在while循环做打印操作。 # java -cp ./test-threads.jar...

2699
来自专栏静晴轩

使用Ldoc给Lua生成文档

Ldoc介绍   Ldoc是一个Lua的文档生成工具,过去,比较常用的Lua生成文档的工具是LuaDoc,可惜作者自从2008年之后就再也没有发布过新的版本了...

2936
来自专栏文渊之博

优化SQLServer——表和分区索引

概念:            简单地说,分区是将大型的对象(如表)分成更小的且易于管理的小块。分区的基本单位是行,需要注意的是与分区视图不同的地方时,分区必须位...

19110
来自专栏Coding迪斯尼

java开发系统内核:创建文件操作API

1563
来自专栏编程微刊

微信小程序从零开始开发步骤(七)引入外部js 文件

2554
来自专栏架构之路

Linux下的make命令用法

Linux 下 make 命令是系统管理员和程序员用的最频繁的命令之一。管理员用它通过命令行来编译和安装很多开源的工具,程序员用它来管理他们大型复杂的项目编译问...

4634
来自专栏开源优测

python selenium2示例 - 利用excel实现参数化

前言 在进行软件测试或设计自动化测试框架时,一个比可避免的过程就是: 参数化,在利用python进行自动化测试开发时,通常会使用excel来做数据管理,利用xl...

3287
来自专栏开源优测

python selenium - 利用excel实现参数化

前言 在进行软件测试或设计自动化测试框架时,一个比可避免的过程就是: 参数化,在利用python进行自动化测试开发时,通常会使用excel来做数据管理,利用xl...

2947
来自专栏JetpropelledSnake

Python中模块(Module)和包(Package)的区别

1. 模块(Module) 在计算机程序的开发过程中,随着程序代码越写越多,在一个文件里代码就会越来越长,越来越不容易维护。 为了编写可维护的代码,我们把很多...

48611

扫码关注云+社区

领取腾讯云代金券