美文网首页
R语言实战—1

R语言实战—1

作者: 七白七白七七白 | 来源:发表于2019-04-08 17:38 被阅读0次

    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)

    相关文章

      网友评论

          本文标题:R语言实战—1

          本文链接:https://www.haomeiwen.com/subject/rywyiqtx.html