查看原文
其他

【R笔记】为什么是R?

vacleon 统计浆糊 2023-09-26

The R Project for Statistical Computing

今年打算更新一些R的学习笔记。为什么是R?因为穷呗!我们现在常用的统计软件其实一般都是收费的,SAS就不说了动辄几百万,SPSS也是几十万的级别,STATA相对便宜,但其最便宜的版本(STATA IC)也得每年595刀,这不是我样的屌丝P民所能承担的。在学生时代就曾听过一个故事,说是某大佬发文章用了SAS,结果被人家SAS查到未购买授权,引发了侵权赔偿的一系列问题。在知识产权越来越受重视的今天,或许哪天这个故事就会发生在你的身上。而R是一个开源项目,完全免费。关键是R拥有数量极为庞大程序包(Package),可以快速实现各种统计功能,而且其他软件中尚不可用的、先进的统计方法也能够在R中快速更新。还有R软件很小,最新的windows版本3.6.2也不过80多个M,打开运算都很快!当然R是靠程序代码实现统计功能,而不能像SPSS、STATA和SAS JMP那样可以通过菜单来操作。

R统计步骤:跟其他软件使用类似,无非就是载入数据,选择合适的统计模型进行分析,然后进行解读。具体来说有如下几步:【1】数据录入/导入、处理;【2】确定统计模型/方法;【3】加载相应程序包;【4】使用相应的函数进行模型适用条件考察、统计分析及模型诊断;【5】结果解读。

R软件的下载:官网CRAN(Comprehensive R Archive Network)https://www.r-project.org/,下载的时候首先要选择下载镜像和版本,国内有6个镜像下载站(清华TUNA Team、中国科学技术大学、香港KoDDoS、精英教育(Elite Education)、兰州大学开源社区及同济大学),最新的Windows版本是R3.6.2。
R命令基础

R有很多的命令,但我们其实没必要都去记。归根结底,我们是在应用统计,至于统计方法怎么来的并不是我们关注的重点,软件只是我们快速实现复杂计算的一个工具而已,我们在使用的时候只要找到相应的帮助文件,按照格式进行书写就可以了。但有一些最基本的或者是很重要的,我们需要对其有所理解。

R命令由函数和赋值构成。注意赋值是使用 <- 而不是等号=。指定位置可以方括号[],像excel一样,冒号用于表示范围。
命令提示符:>。每条命令以命令提示符开始,R软件自动给出。
#开头的文字表示注释,不参与R程序。
设置默认路径:setwd("路径")。也可以通过菜单文件>>改变工作目录…来实现。注意路径中使用的是“/”而不是反斜杠“\”。
退出:q(),相当于直接关闭R软件

帮助文件的获取帮助:帮助>>手册(PDF文件),其他帮助文件可通过帮助菜单来实现;

帮助文档首页命令:help.start() ,等同于帮助>>Html帮助

以 xx为关键词搜索帮助命令:help.search("xx")??xx ,等同于帮助>>搜索帮助…,可以搜索程序包、函数等,可以了解其具体介绍,包括功能、格式、示例等;

查看函数xx的帮助(引号可以省略)命令:help("xx")?xx ,等同于帮助>>R函数帮助(文本)…,可以搜索函数,获得具体介绍,包括功能、格式、示例等。

数据集的结构:
存储数据的对象类型,包括标量、向量(vector)、矩阵(matrix)、数组(array)、数据框(data.frame)和列表(list)。标量是单个元素;向量是一组相同数据类型的数据,是一维数组,可以储存数值型、字符型和逻辑型数据,创建向量用函数c();矩阵是把向量扩展成二维数组,所有元素的类型(数值型、字符型或逻辑型)都一样,函数matrix()可创建矩阵;数组是将矩阵扩展到三维及以上,函数array可创建数组;数据框的结构上像矩阵,但数据框的列可以包含不同的数据类型,是用于储存数据集的主要数据结构,函数data.frame()可创建数据框;列表则是包含各种类型的对象的集合,函数list()可创建列表。有时候我们使用的我们需要对象类型间转换,比如你的数据类型是向量,但想使用的某个程序包函数针对的对象是矩阵,可以通过as.matrix(x)来变换。
包(Package):

包是R中可以实现某类功能的函数、数据等集合,相当于一个一个的小的功能模块,模块中的不同函数可以实现各种功能。当你确定了统计模型/方法或者想要做的统计图后,就可以去查找那些包可以实现这些功能了,然后从库中载入这个包(库中没有就先下载),接下来就可以使用包中的函数直接进行分析了。安装R时会同时安装一些常用的默认包,还有大量的包可在使用时从CRAN中下载。应该说包是R中最让人欣喜的功能了。截止到2020年1月17日上午23点,CRAN包库里可用包已达到15323个,最近几乎每天都会有大量新包添加。网站https://cran.r-project.org/可以查看可用包。电脑中储存包的目录叫库(library)。在使用包时,必须先将包载入到当前的R工作环境,函数library()可以显示库中的包及其功能,命令search()可以告诉你哪些包已加载并可使用。

如果你不知道你想要的统计功能哪些包可以实现,[http://finzi.psych.upenn.edu/search.html]或许可以给你一些提示,如果你已经知道了要用到哪个包,但不知道具体怎么用,前面说过的帮助菜单或者命令也许能给你详尽的介绍,或者干脆直接通过[https://cran.r-project.org/web/packages/要查询的程序包名称]来寻找。
程序包下载:程序包>>装程序包…(相当于命令install.packages()),然后选择镜像下载地址,选择要下载的程序包,确定即可。也可以通过命令install.packages("程序包名称")下载需要的程序包。

加载程序包:程序包>>加载程序包…,可通过命令library(预加载的包名称)来实现。

数据载入:可以直接录入,也可以直接从其他文件导入到指定的R数据结构(向量、矩阵、数组、数据框和列表)中。

函数edit()可实现手动输入数据。
导入 Excel 数据:你可以使用具有此功能的程序包的函数(函数{包})直接将一个excel工作表导入到R的一个数据框中,比如read.xlsx{openxlsx}read_excel {readxl}read.xlsx{xlsx}。注意第一次使用时需要下载并安装。还有一种方法是先在Excel中将文件另存为一个逗号分隔文件(csv),然后用read.table()将数据从csv文件导入到R的数据框结构中。

其他文件的导入,如SAS、SPSS、STATA。foreign包中的read.ssd(),Hmisc包中的sas.get()可导入SAS文件;foreign包中的函数read.spss()、Hmisc包中的spss.get()函数可导入SPSS文件;foreign包中的read.dta()可导入STATA文件。

我们在《多元正态分布检验的R实现方法》一文中已有讲到STATA文件的导入,注意需要先将stata文件保存为12版本及以下,命令清单如下:

library(foreign)   #载入程序包foreign

rm4 <- read.dta("D:/Temp/STATA/RM.dta")   #新建对象rm,赋值为导入的名称为RM的STATA文件,并保存为数据框

rm4   #显示数据框rm4的内容

在此次笔记的最后,我们用一个例子来看一下R的运行及数据导入。本例是将一个excel文件导入到R中。
【1】安装下载包xlsx、openxlsx、readxl。注意xlsx包的使用还需要先安装Java(https://www.java.com/zh_CN/),然后下载安装xlsx包,此外还要安装相关的xlsxjars包和rJava包。

程序包>>安装程序包…,选择下载镜像,确定,选择要下载的程序包,确定。镜像可以选择0-Cloud[https],也可以选择中国境内的几个镜像,如下载失败可以换个试试。

当然也可以直接使用命令来进行安装

install.packages("xlsx")   #安装程序包xlsx

install.packages("xlsxjars")   #安装程序包xlsxjars

install.packages("rJava")   #安装程序包rJava

install.packages("openxlsx")   #安装程序包openxlsx

install.packages("readxl")   #安装程序包readxl

安装成功会会显示程序包打开成功,MD5和检查也通过,程序包在什么位置,如xlsxjars包安装成功显示如下

【2】导入数据

setwd("D:/Temp")   #设置默认工作路径

library(xlsx)   #载入程序包xlsx

rm<-read.xlsx("RM.xlsx",1)   #新建对象rm,赋值为导入的名称为RM的excel第1个sheet工作表,并保存为数据框文件。如果RM不在默认工作目录中,此处命令应把路径写完整:rm<-read.xlsx("D:/Temp/RM.xlsx",1)

rm   #显示数据框rm的内容

如果你只想显示采用A方法的T0-T4的数据,最后一行命令可以改为:

rm([1:5],[3:7])   #显示数据框rm的第1-5行3-7列的内容

如果你不想显示第1列,命令除了上面的方法外,还可以直接简单写为:

rm[-1]

上面只是显示,如果你想新建的R数据框只导入B方法的数据,不显示第1-2列的内容,命令为:

rm<-read.xlsx("RM.xlsx",1,startRow=1,endRow=5) 

rm[-1:-2]

其实对你想了解某个函数如何使用,可以直接使用命令help("read.xlsx"),或者通过菜单:帮助>>R函数帮助(文本)…,然后输入read.xlsx即可;或者通过帮助>>搜索帮助…help.search("xlsx")),来进行查找函数read.xlsx的功能与使用方法,查询可知:

Description:Read the contents of a worksheet into an R data.frame.

Usage

read.xlsx(file, sheetIndex, sheetName=NULL, rowIndex=NULL,startRow=NULL,endRow=NULL, colIndex=NULL, as.data.frame=TRUE, header=TRUE, colClasses=NA,keepFormulas=FALSE, encoding="unknown", password=NULL, ...)

read.xlsx2(file, sheetIndex, sheetName=NULL, startRow=1,colIndex=NULL, endRow=NULL, as.data.frame=TRUE, header=TRUE,colClasses="character", password=NULL, ...)

后面是对用法中的每一项是什么意思进行解释,然后是详细介绍以及示例。

xlsx包是安装比较困难的一个包,在安装的时候屡次报错,比如

错误: package or namespace load failed for ‘xlsx’: loadNamespace()里算'rJava'时.onLoad失败了,详细内容:

调用: fun(libname, pkgname)

错误: No CurrentVersion entry in Software/JavaSoft registry! Try re-installing Java and make sure R and Java have matching architectures.

在安装R软件的时64位(RX64)和32位(R i386)默认同时安装的,在改用32位后这个问题得以解决。

类似的,read.xlsx{openxlsx}read_excel {readxl}的导入excel命令清单如下:

library(openxlsx)

rm2<-read.xlsx("D:/Temp/RM.xlsx",1)

rm2

library(readxl)

rm3<-read_excel("D:/Temp/RM.xlsx")

rm3



















END

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存