R语言实战—1

R语言介绍

help("foo")?foo 查看函数 foo 的帮助(引号可以省略)
example("foo") 函数 foo 的使用示例(引号可以省略)

1-2
setwd("C:/myprojects/project1")  #设置工作目录
options()   #显示当前选项设置
options(digits=3)  #数字格式化:小数点后三位有效数字
x <- runif(20)  #创建包含20个均匀分布随机变量的向量
summary(x)  #生成数据的摘要统计量
hist(x)  #生成直方图
q()

注意setwd()命令的路径中使用了正斜杠。R将反斜杠(\)作为一个转义符。即使你在Windows平台上运行R,在路径中也要使用正斜杠。同时注意,函数setwd()不会自动创建一个不存在的目录。如果必要的话,可以使用函数dir.create()来创建新目录,然后使用setwd()将工作目录指向这个新目录。

函数source("filename")可在当前会话中执行一个脚本

函数sink("filename")将输出重定向到文件filename中,默认情况下,如果文件已经存在,则它的内容将被覆盖。使用参数append=TRUE可以将文本追加到文件后,而不是覆盖它。参数split=TRUE可将输出同时发送到屏幕和输出文件中。

要重定向图形输出,使用表1-4中列出的函数即可。最后使用dev.off()将输出返回到终端。

命令search()可以告诉你哪些包已加载并可使用

第一次安装一个包,使用命令install.packages(" ")即可。
使用命令update.packages()可以更新已经安装的包。使用installed.packages()命令,这将列出安装的包,以及它们的版本号、依赖关系等信息。

命令help(package="package_name")可以输出某个包的简短描述以及包中的函数名称和数据集名称的列表。

创建数据集

向量是用于存储数值型、字符型或逻辑型数据的一维数组
a <- c(1, 2, 5, 3, 6, -2, 4)
b <- c("one", "two", "three")
c <- c(TRUE, TRUE, TRUE, FALSE, TRUE, FALSE)
a是数值型向量,b是字符型向量,而c是逻辑型向量,单个向量中的数据必须拥有相同的类型或模式(数值型、字符型或逻辑型)
通过在方括号中给定元素所处位置的数值,我们可以访问向量中的元素。例如,a[c(2, 4)]
用于访问向量a中的第二个和第四个元素。更多示例如下:

a <- c("k", "j", "h", "a", "c", "m")
a[3]
[1] "h"
a[c(1, 3, 5)]
[1] "k" "h" "c"
a[2:6]
[1] "j" "h" "a" "c" "m"

矩阵是一个二维数组,只是每个元素都拥有相同的模式(数值型、字符型或逻辑型)。可通过函数matrix()创建矩阵:
myymatrix <- matrix(vector, nrow=number_of_rows, ncol=number_of_columns,byrow=logical_value, dimnames=list(char_vector_rownames, char_vector_colnames))
其中vector包含了矩阵的元素,nrow和ncol用以指定行和列的维数,dimnames包含了可选的、以字符型向量表示的行名和列名。选项byrow则表明矩阵应当按行填充(byrow=TRUE)还是按列填充(byrow=FALSE),默认情况下按列填充

2-1  创建矩阵
> y <- matrix(1:20, nrow=5, ncol=4)
> y
[,1] [,2] [,3] [,4]
[1,] 1 6 11 16
[2,] 2 7 12 17
[3,] 3 8 13 18
[4,] 4 9 14 19
[5,] 5 10 15 20
> cells <- c(1,26,24,68)
> rnames <- c("R1", "R2")
> cnames <- c("C1", "C2")
> mymatrix <- matrix(cells, nrow=2, ncol=2, byrow=TRUE,dimnames=list(rnames, cnames))
> mymatrix
C1 C2
R1 1 26
R2 24 68
> mymatrix <- matrix(cells, nrow=2, ncol=2, byrow=FALSE,
dimnames=list(rnames, cnames))
> mymatrix                          #按行填充
      C1 C2
R1 1 24
R2 26 68
> mymatrix <- matrix(cells, nrow=2, ncol=2, byrow=FALSE,
dimnames=list(rnames, cnames))
> mymatrix                             #按列填充
C1 C2
R1 1 24
R2 26 68

2-2 矩阵下标的使用
> x <- matrix(1:10, nrow=2)
> x
[,1] [,2] [,3] [,4] [,5]
[1,] 1 3 5 7 9
[2,] 2 4 6 8 10
> x[2,]
[1] 2 4 6 8 10
> x[,2]
[1] 3 4
> x[1,4]
[1] 7
> x[1, c(4,5)]
[1] 7 9

数组(array)与矩阵类似,但是维度可以大于2。数组可通过array函数创建,形式如下:
myarray <- array(vector, dimensions, dimnames)
其中vector包含了数组中的数据,dimensions是一个数值型向量,给出了各个维度下标的最大值,而dimnames是可选的、各维度名称标签的列表。

2-3 创建一个三维数组
> dim1 <- c("A1", "A2")
> dim2 <- c("B1", "B2", "B3")
> dim3 <- c("C1", "C2", "C3", "C4")
> z <- array(1:24, c(2, 3, 4), dimnames=list(dim1, dim2, dim3))
> z
, , C1
     B1 B2 B3
A1 1 3 5
A2 2 4 6
, , C2
     B1 B2 B3
A1 7 9 11
A2 8 10 12
, , C3
     B1 B2 B3
A1 13 15 17
A2 14 16 18
, , C4
      B1 B2 B3
A1 19 21 23
A2 20 22 24

数据框不同的列可以包含不同模式(数值型、字符型等)的数据,可通过函数data.frame()创建:
mydata <- data.frame(col1, col2, col3,...)
其中的列向量col1、col2、col3等可为任何类型(如字符型、数值型或逻辑型)。每一列的名称可由函数names指定。

2-4 创建一个数据框
> patientID <- c(1, 2, 3, 4)
> age <- c(25, 34, 28, 52)
> diabetes <- c("Type1", "Type2", "Type1", "Type1")
> status <- c("Poor", "Improved", "Excellent", "Poor")
> patientdata <- data.frame(patientID, age, diabetes, status)
> patientdata
   patientID age diabetes status
1 1 25 Type1 Poor
2 2 34 Type2 Improved
3 3 28 Type1 Excellent
4 4 52 Type1 Poor
2-5 选取数据框中的元素
> patientdata[1:2]
patientID age
1 1 25
2 2 34
3 3 28
4 4 52
> patientdata[c("diabetes", "status")]
diabetes status
1 Type1 Poor
2 Type2 Improved
3 Type1 Excellent
4 Type1 Poor
> patientdata$age
[1] 25 34 28 52

patientdata <- data.frame(patientID, age, diabetes,status, row.names=patientID) 
#将patientID指定为R中标记各类打印输出和图形中实例名称所用的变量。

> table(patientdata$diabetes, patientdata$status)      
#生成糖尿病类型变量diabetes和病情变量status的列联表
          Excellent Improved Poor
Type1 1 0 2
Type2 0 1 0

函数attach()可将数据框添加到R的搜索路径中(attach(patientdata)省略输入patientdata$)
函数detach()将数据框从搜索路径中移除
另一种方式是使用函数with(),用法:with(patientdata,{table(diabetes, status) }),赋值仅在此函数的括号内生效
使用特殊赋值符<<-替代标准赋值符(<-)即可,它可将对象保存到with()之外的全局环境中。

with(mtcars, {
nokeepstats <- summary(mpg)
keepstats <<- summary(mpg)
})
nokeepstats
Error: object 'nokeepstats' not found
keepstats
Min. 1st Qu. Median Mean 3rd Qu. Max.
10.40 15.43 19.20 20.09 22.80 33.90

名义型变量是没有顺序之分的类别变量:Diabetes(Type1、Type2)
有序型变量表示一种顺序关系,而非数量关系:Status(poor、improved、excellent)
年龄Age就是一个连续型变量,它能够表示像14.5或22.8这样的值以及其间的其他任意值。
类别(名义型)变量和有序类别(有序型)变量在R中称为因子(factor)
语句diabetes <- factor(diabetes)将此向量存储为(1, 2, 1, 1)
针对向量diabetes进行的任何分析都会将其作为名义型变量对待,
要表示有序型变量,需要为函数factor()指定参数ordered=TRUE
语句status <- factor(status, ordered=TRUE)会将向量编码为(3, 2, 1, 3)
对于字符型向量,因子的水平默认依字母顺序创建,可以通过指定levels选项来覆盖默认排序
status <- factor(status, order=TRUE,
levels=c("Poor", "Improved", "Excellent"))
数值型向量可以用levels和labels参数来编码成因子。
sex <- factor(sex, levels=c(1, 2), labels=c("Male", "Female"))

2-6 因子的使用
> 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)    #显示对象的结构
‘data.frame’: 4 obs. of 4 variables:
$ patientID: num 1 2 3 4
$ age : num 25 34 28 52
$ diabetes : Factor w/ 2 levels "Type1","Type2": 1 2 1 1
$ status : Ord.factor w/ 3 levels "Excellent"<"Improved"<..: 3 2 1 3
> summary(patientdata)   #显示对象的统计概要
patientID     age           diabetes     status
Min. :1.00    Min. :25.00    Type1:3     Excellent:1
1st Qu.:1.75  1st Qu.:27.25  Type2:1     Improved :1
Median :2.50  Median :31.00              Poor :2
Mean :2.50    Mean :34.75
3rd Qu.:3.25  3rd Qu.:38.50
Max. :4.00    Max. :52.00

列表中可能是若干向量、矩阵、数据框,甚至其他列表的组合。可以使用函数list()创建列表:
mylist <- list(object1, object2, ...)
其中的对象可以是目前为止讲到的任何结构。你还可以为列表中的对象命名:
mylist <- list(name1=object1, name2=object2, ...)

2-7 创建一个列表
> g <- "My First List"
> h <- c(25, 26, 18, 39)
> j <- matrix(1:10, nrow=5)
> k <- c("one", "two", "three")
> mylist <- list(title=g, ages=h, j, k)
> mylist
$title
[1] "My First List"
$ages
[1] 25 26 18 39
[[3]]
[,1] [,2]
[1,] 1 6
[2,] 2 7
[3,] 3 8
[4,] 4 9
[5,] 5 10
[[4]]
[1] "one" "two" "three"
> mylist[[2]]
[1] 25 26 18 39
> mylist[["ages"]]
[[1] 25 26 18 39

R中的函数edit()会自动调用一个允许手动输入数据的文本编辑器。
(1) 创建一个空数据框(或矩阵),其中变量名变量的模式需与理想中的最终数据集一致;
(2) 针对这个数据对象调用文本编辑器,输入你的数据,并将结果保存回此数据对象中。
mydata <- data.frame(age=numeric(0),gender=character(0), weight=numeric(0))
mydata <- edit(mydata)
语句mydata <- edit(mydata)的一种简捷的等价写法是fix(mydata)


可以使用read.table()从带分隔符的文本文件中导入数据。
mydataframe <- read.table(file, options)

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,014评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,796评论 3 386
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,484评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,830评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,946评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,114评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,182评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,927评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,369评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,678评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,832评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,533评论 4 335
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,166评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,885评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,128评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,659评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,738评论 2 351

推荐阅读更多精彩内容