美文网首页R语言
R语言的一些问题

R语言的一些问题

作者: Nickier | 来源:发表于2018-12-09 15:21 被阅读8次

    1.对于数据类型不理解:矩阵matrix和数据框dataframe有什么区别?列表怎么取?

    矩阵(matrix)

    是具有维度属性的向量,矩阵都是二维的,和向量类似,矩阵中也仅能包含一种数据类型。
    创建矩阵的方法:
    (1)直接创建matrix()

    b = matrix(1:20, nrow = 5, ncol = 4)
    

    (2)维度dim()
    添加维度向量 dim()是将向量转变为矩阵的方法

    a = 1:30
    dim(a) = c(5,6)
    

    数据框(data frame)

    数据框中各列可以是不同类型的数据,每列是一个变量,每行是一个观测。数据框可以看成是矩阵的推广,也可看作一种特殊的列表对象,很多高级统计函数都会用到数据框。
    创建数据框的方法:
    数据框用函数data.frame()生成,语法是:data.frame(data1, data2, ...)

    name <- c('Mr A', 'Mr B', 'Mr C')
    group <- rep(1, 3)
    score <- c(69, 71, 92)
    df <- data.frame(name, group, score)
    

    列表(list)

    列表(list)是一种可包含多种不同类型对象的向量,是一些对象(或成分,component)的有序集合。一般比较少自己动手创建一个列表,可以用内置数据集来对列表进行探索。如R语言中的内置数据集state.center :美国50个州中心的经度和纬度

    # 美国50个州中心的经度和纬度
    state.center    
    # 取这个列表中的第一个子列表:一层中括号[ ]
    state.center[1]
    # 取这个列表中的第一个元素:两层中括号[ ]
    state.center[[1]]
    # 取这个列表中的第一个元素,发现一个元素是一个向量,可以取这个向量的第一个元素
    state.center[[1]][1]
    

    2.安装R包的报错?

    R语言中不同的包安装方式不用
    普通的包可以用下面的命令安装

    install.package('packagename')
    library(packagename)
    

    对于biocondutor里面的包(分成3种:数据包,功能包,注释包),需要用下面的命令安装

    options()$repos
    options()$BioC_mirror
    options(BioC_mirror="https://mirrors.ustc.edu.cn/bioc/")
    options("repos" = c(CRAN="https://mirrors.tuna.tsinghua.edu.cn/CRAN/"))
    BiocManager::install("packagename",ask = F,update = F)
    library(packagename)
    
    有时候会报错,如以下报错信息 pgerror.png

    提示说不能移除已经安装的limma包,就是这个包已经安装过了,但是现在又装了一次,原先的那个没方法移除,新的包加载不了。
    解决方法是这样的,先打开已经安装的包所在的路径1,然后手动删除掉,在进入刚刚下载的包所在的路径2,解压后放到路径1就好。然后在RStudio里面就可以library了。

    3.rm(list = ls()) ;options(stringsAsFactors = F)

    这两行命令可以清空环境,写代码的时候把这两行代码放在首行,可以避免很多不必要的报错。

    4.不会组织项目.Rproj

    写代码之前,新建一个文件夹,copy一个.Rproj进去,然后双击就可以直接打开RStudio了,再在RStudio里面新建script写代码。

    5.apply系列函数

    apply函数和lapply可以理解“遍历”的意思。
    apply的用法是

    apply(X, MARGIN, FUN, ...)
    

    X是要传入的对象,可以是一个矩阵,也可以是一个数据框。MARGIN是指选行(用数字1表示),或者选列(用数字2表示),FUN是要执行的操作。完整的意思就是,对于X的每一行/列执行FUN的操作。

    lapply的用法是

    lapply(list, function, ...)
    

    对每列进行操作,非常适合数据框;输入的数据必须是list型。
    举个例子

    lapply(df, function(x) x+3)
    

    对数据框df的每一列执行function操作,操作的内容是每接收一个x,就做x+3

    6.数据类型的转换 is.matrix,as.matrix等系列函数

    is.系列函数是判断变量是否属于某一类型,as.系列函数是转变类型

    # 如判断变量b是否是矩阵matrix
    is.matrix(b)
    # 将b转换成数据框as.data.frame
    # 如果没有重新赋值,则不改变原来的变量类型
    as.data.frame(b)
    class(b)
    # 如果重新赋值了
    b = as.data.frame(b)
    b
    

    7.read.table()读入的数据是一个因子

    在运行read.table()前运行这行代码,可以避免这个问题

    rm(list = ls()) ;options(stringsAsFactors = F)
    

    8.merge函数

    在R中可以使用merge()函数去合并两个数据框,这两个不同的数据框中有共同的列或行。
    使用格式是:
    merge(x, y, by = intersect(names(x), names(y)), by.x = by, by.y = by, all = FALSE, all.x = all, all.y = all, sort = TRUE, suffixes = c(".x",".y"), incomparables = NULL, ...)

    x,y:用于合并的两个数据框
    byby.xby.y:用于连接两个数据集的列
    intersect(a,b):值向量a,b的交集
    names(x):指提取数据集x的列名
    by = intersect(names(x), names(y)): 是获取数据集x,y的列名后,提取其公共列名,作为两个数据集的连接列, 当有多个公共列时,需用下标指出公共列,如names(x)[1],指定x数据集的第1列作为公共列 也可以直接写为 by = ‘公共列名’ ,前提是两个数据集中都有该列名,并且大小写完全一致,R语言区分大小写
    allall.xall.y:指定x和y的行是否应该全在输出文件
    sort:by指定的列是否要排序
    suffixes:指定除by外相同列名的后缀
    incomparables:指定by中哪些单元不进行合并

    # 创建数据框w
    > name = c('A','B','C','D')
    > school = c('s1','s2','s1','s1')
    > class = c(10, 5, 4, 11)
    > w = data.frame(name, school, class)
    > w
      name school class 
        A    s1    10     
        B    s2     5      
        C    s1     4      
        D    s1    11       
    
    # 同上创建数据框q
    > name  =  c('D','B','C','A')
    > maths = c(80,89,55,90)
    > English = c(88, 89, 32, 89)
    > q = data.frame(name, maths, English)
    > q
    name  maths  English
        D    80      88
        B    89      89
        C    55      32
        A    90      89
    # 用merge函数把w和q以name这一列匹配然后合并起来,赋值给m
    m = merge(w,q,by = 'name')
    m
      name school class maths English
    1    A     s1    10    90      89
    2    B     s2     5    89      89
    3    C     s1     4    55      32
    4    D     s1    11    80      88
    

    相关文章

      网友评论

        本文标题:R语言的一些问题

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