函数 | 含义 |
---|---|
install.packages() | 装包 |
update.packages() | 更新包 |
library() | 加载包 |
在R中,一个object可以是任何可以赋值给变量的东西(数据结构、函数、甚至是graph),一个object有两个重要的东西叫mode和class,前者决定这个object的存储方式(numeric,character,logical),后者决定函数如何处理这个object。虽然有object的概念,但是R本身仍然是一种自顶向下式的编程方式,大部分功能都是通过各式各样的函数来实现的。
dim()
函数返回数据的维度length()
函数返回数据的长度str()
函数返回数据的结构class()
函数返回数据的类型mode()
函数返回数据的存储方式names()
函数返回数据的列名(Gives the names of components in an object)c(object,object)
函数将多个向量合并为一个向量cbind()
按列combinerbind
按行combinels()
列出当前所有的objecthead/tail()
rm()
删除或移除newobject <- edit(object)
编辑并保存fix(object)
修改一个object一般来说,可以通过help(function_name/dataset_name)
,?function_name
,help(package="package_name")
,??package_name
或者语句查阅官方文档,直接输入help()
也可以查看该函数如何使用。
除此以外还有:
example(function_name)
查看函数的例子apropos(,mode=function)
,查找所有相关的内容help.search()
或者 ??RSiteSearch()
,针对网站内容的搜索help.start()
,打开R自带的文件帮助系统data()
列出所有目前加载的包中可用的数据集vignette()
,Lists all available vignettes for currently installed packages,也可以传入字符串查找某一个包内的。The workspace is your current R working environment and includes any user-defined objects (vectors, matrices, data frames, lists, functions).
getwd() # print the current working directory - cwd
ls() # list the objects in the current workspace
setwd(mydirectory) # change to mydirectory
setwd("c:/docs/mydir") # note / instead of \ in windows
setwd("/usr/rob/mydir") # on linux
注意win中的路径问题,r只支持以下两种写法
c:\\my documents\\myfile.txt
c:/mydocuments/myfile.txt
# view and set options for the session
help(options) # learn about available options
options() # view current option settings
options(digits=3) # number of digits to print on output
# work with your previous commands
history() # display last 25 commands
history(max.show=Inf) # display all previous commands
# save your command history
savehistory(file="_myfile_") # default is ".Rhistory"
# recall your command history
loadhistory(file="_myfile_") # default is ".Rhistory"
# save the workspace to the file .RData in the cwd
save.image()
# save specific objects to a file
# if you don't specify the path, the cwd is assumed
save(object list,file="myfile.RData")
# load a workspace into the current session
# if you don't specify the path, the cwd is assumed
load("myfile.RData")
q() # quit R. You will be prompted to save the workspace.
将写好的R脚本运行会在命令行中调用source()
函数运行脚本,并将结果输出到命令行中。如果想要将结果输出到文件中,可以使用sink("filename")
函数,将输出重定向到其它地方,也可以通过调整参数来控制输出的格式和保存的方式,当将所有需要输出的结果保存完成后,可以在命令行中输入sink()
来重新将输出重定向到命令行中。
图像的输出结果可以通过
png()
函数来控制,png("filename")
将图像输出到文件中,使用dev.off()
函数来关闭输出。类似的还有jpeg()
,bmp()
,pdf()
等函数。
R中的数据结构有很多种类型,不同的数据结构存储不同的数据,标注以及索引的方式也会有所不同。
r中的数据结构与平日认知不同的是对于array类型的数据结构来说,该数据结构可以存储数值,字符串,布尔值三种类型的值,不过一个array内的所有元素必须保证类型一致,因为vectors和matrices可以看成是低维度的array,因此这两种数据结构也有这样的特征。
一个向量相当于一维的array,元素类型可以是数值、字符串、布尔值,但必须保证所有元素类型一致,创建vectors使用combine函数c()
。
若vectors中仅有一个元素,则为scalars(标量)。
R的索引也支持python中":"的操作,不过需要注意的是r中的索引初始位置从1开始,对于vectors,共有三种索引方式:
a <-c("xiaoming","xiaohong","xa","xiaozhang")
a
# vectors索引的三种方式
a[1]
a[c(2,4)]
a[2:4]
创建使用matrix
函数,传入vector
,nrow
,ncol
变量来确定矩阵的值和行和列数,默认数据按列排列,可以调整byrow
参数。R的matrix是有行列标签的,可通过dimnames
传入。
matrix的索引方式与python类似,不过多了一种通过传入numeric vector的方式对matrix进行切片(有点类似于python中的列表形式):
mymatrix<-matrix(1:20,nrow=4,ncol=5)
mymatrix
mymatrix[1,]
mymatrix[1,c(1,3,5)]
mymatrix[1,2]
array与matrix相似,不过可以有多个维度,创建依据array()
函数。
DataFrame是一种更为灵活的数据结构因为它的不同列可以存储不同类型的数据,这也是在R中最为常见的一种数据结构,使用data.frame()
来创建,直接传入每一列对应的vector即可,默认使用传入的vector的变量名做列名,也可以借助names
函数来进行修改。
stu_name<-c("Tom","Jack","Mary","John","Lily")
stu_score<-c(80,90,70,60,85)
stu_height<-c(170,180,165,175,160)
stu_info<-data.frame(stu_name,stu_score,stu_height)
stu_info
names(stu_info)<-c("name","score","height")
stu_info
除了前面介绍的几种索引方式以外,因为DataFrame是有列名的,所以还可以通过列名来进行索引,这种索引方式与python中的DataFrame索引有一些区别:
data[1]
将取出第一列的数据。data$colname
的方式,这种方式的索引只适用于取出一列,且返回的是一个vector而不是一个DataFrame。# 索引
stu_info[1:2]
stu_info[c("name", "score")]
stu_info$name
stu_info[1]
在R中的工作区中有两个命名空间,一个是loaded namespaces,另外一个是attached namespaces。默认情况下程序的运行结果保存在Global Evoriment中,R在进行搜索时只会搜索这三个区域内的object。DataFrame类型的数据每次通过data$colname
的方式来访问会相对比较麻烦,因此可以使用attach()
函数将DataFrame附加到attached namespaces中(adds the data frame to the R search path),这样就可以直接使用变量名来访问了,在使用完成后,通过detach()
函数可以将DataFrame从attached namespaces中移除,避免对其他object产生影响。
attach(stu_info)
name
score<-score+10#全局环境增加一个score变量
detach(stu_info)
#直接使用会报错
#name
这种方法下不能对列的取值进行更改,如果直接对列进行赋值如score=score+10
会在全局环境中创建一个新的score变量而不是改变原来列的值,一般只用于简化列名的索引。
这种方法的弊端也很明显,如果DataFrame中的列名与其他Global Environment中object重名,那么会产生冲突,这时可以借助with
和within
函数。
with
函数会利用传入的数据重构一个环境然后执行一系列程序,这样就可以避免命名冲突的问题,另外with
会在程序执行完后销毁所有已有的变量,因此如果在with内创建变量,那么在with外是无法访问的,如果希望创建一个可以在函数外访问的变量,可以使用<<-
对变量进行赋值。
另外一个与with
函数类似的是within
函数,该函数会在重构的环境运行程序,但是该函数会在程序执行结束后执行一次检查,将不与全局环境冲突的变量保存下来,换言之在within
中是可以修改DataFrame中的列的值的。
with:Evaluate an R expression in an environment constructed from data, possibly modifying (a copy of) the original data. within is similar, except that it examines the environment after the evaluation of expr and makes the corresponding modifications to a copy of data, and returns it.
with(data,expession)
其中expression
用来表示需要执行的语句,若有多行则使用{}
将语句包裹起来。
stu_info
with(stu_info, {
name
score<-score+10
})
stu_info
stu_info_copy=within(stu_info, {
name
score<-score+10
})
stu_info
两类类别型变量——名义变量(nominal variables)和有序变量(ordered factor)。
Categorical (nominal) and ordered categorical (ordinal) variables in R are called factors. Factors are crucial in R because they determine how data is analyzed and presented visually.
factor()
函数有一种对类别型自变量进行编码的感觉,这个主要通过传入labels
标签来实现,默认情况下该函数会将传入的值按照字母顺序进行与labels匹配,但是也可以通过levels
参数来修改排序方法。
factor(c("yes", "no", "yes", "yes", "no"),levels=c("yes","no"),labels = c(1,0))
factor(c("yes", "no", "yes", "yes", "no"),labels = c(1,0))
若传入的值本身就是类别型变量,函数不会对列值做任何匹配。
patientID <- c(1, 2, 3, 4)
age <- c(25, 34, 28, 52)
diabetes <- c("Type1", "Type2", "Type1", "Type1")
status <- c("Poor", "Improved", "Excellent", "Poor")
diabetes <- factor(diabetes)
status <- factor(status, order=TRUE)
patientdata <- data.frame(patientID, age, diabetes, status)
str(patientdata)
summary(patientdata)
若不告诉r代码中两列变量属于类别型变量,summary函数默认会将其看成字符串。
list是R中一种比较复杂的数据结构,一般来说,list中的元素可以是目前已经提到的几种数据类型中的任意一种。创建list使用list()
函数:
list(object1, object2, ...)
list里边的每一个元素也可以通过形如name=object1
的方式添加一个名字.
列表的索引可以通过数字直接进行索引,也可以通过元素的名称进行索引。不过需要注意的是对索引值加上[]
时,会直接返回列表中元素的值,而如果不加则会返回一个列表,这与之前的索引稍有区别(有点类似于python中对DataFrame切片的感觉,试了下好像R中的DataFrame也支持[]
的索引方式)
a<-c(1,2,3,4,5)
name<-c("Tom","Jack","Mary","John","Lily")
b<-c(80,90,70,60,85)
mylist<-list(a,title="表的名字",Name=name,b)
# 三种索引方式
mylist[[2]]
mylist$title
typeof(mylist["Name"])
typeof(mylist[["Name"]])
list这种比较复杂的数据结构的出现主要是为了承接函数各种类型的返回值(如果调用mode()
函数发现返回结果是list类型,可以先使用names()
查看返回列表的元素名称)
另外一方面也为不同类型的数据的调用提供了方便
导入数据的几种方法:
edit()
函数read.table()
函数得到read.table()
函数url()
函数R中空值的概念是通过函数引入的,例如numeric(0)
,character(0)
等
data<-read.table("./data8.csv",header=T,sep=",")
names(data)
length(data)
# class(data)
mode(data)#存储方式为列表
dim(data)
head(data)
变量标签的修改,主要通过names()
函数来完成,与修改data.frame 中的列名比较类似。