zoukankan      html  css  js  c++  java
  • 与R纠缠的两件事——rownames和子集--转载

    与R语言纠缠了一个星期,从快速上手的暗暗得意,到之后某些细节的纠结烦躁,过山车式体验中,我逐渐才认识了真实的R语言。

    期间遇到两个很烦恼的问题,一个是让人烦躁抓狂,另一个是无意发现的重大错误。

    1.      令人抓狂的rownames

    若数据矩阵datamatrix如图1,无列名和行名及表头。若c1~c4分别为colnames,而r1~r5为rownames,表头为A。

    图1:datamatrix

    如何添加c1~c4?r1~r5?

    coln = c(”c1”,”c2”,”c3”,”c4”)

    rown = c(”r1”,”r2”,”r3”,”r4”,”r5”)

    colnames(datamatrix) = coln

    rownames(datamatrix) = rown

    如何添加表头A?

    colnames(datamatrix) = c(“A”,”c1”,”c2”,”c3”,”c4”)

    上述命令会直接报错,列数不匹配。

    colnames(datamatrix)[1] = “A”

    上命令会让矩阵变成​如图2所示

    图2:datamatrix

    究其本质,都是因为colnames()函数默认调用的都是真实数据上(x1~x4)的列名,而不认识行名上(r1~r5)的列名。

           正确添加表头命令为:

           datamatrix= cbind(rownames(datamatrix),datamatrix)#将行名加入矩阵

           rownames(datamatrix)[1]= “A”

    实现后矩阵如图3,

    图3:datamatrix

    另外

    ​read.table或wirte.table中也有row.names和col.names条件格式。与上rownames和colnames不仅书写上有区别,意义上也有。row.names用于指定行名。数值为k时,则将第k列设置为列名,并将其从数据矩阵中移除。而write.table中row.names=F将矩阵的行名剔除后写进table.

    2.      子集选取("numeric"和"character"之争)

    genename =

                CRHBP,….

    mode(genename)  =

             “numeric”

    m1 为如下矩阵

    图4:m1

    mode(m1)  =

               "numeric"​

    若要在m1中选取genename对应的id所在行的子集,命令应该为:

    m1[genename,]

    ​但结果很诡异,返回的并不是id对应为CRHBP所在行,返回却是CRHR1所在行

    要想返回所选的行,必须先将genename转换为character类型,才是准确的。

    genename <- as.character(genename)

    m1[genename,]

    此时,结果才​为所求行。

  • 相关阅读:
    永恒之蓝漏洞复现及留下隐藏后门nc及关闭主机防护开启后门
    python实现的分离免杀(包含pyinstaller的安装与使用)
    免杀一句话木马,人才太多了
    cs利用smb上线出网与不出网主机
    linux反弹shell的各种姿势
    使用frp把目标端口的服务代理出来
    使用frp进行内网穿透(内网隧道搭建)
    CS与msf的shell互相传递
    Python 图形验证码识别与利用
    Python Selenium 渗透测试中的使用
  • 原文地址:https://www.cnblogs.com/nkwy2012/p/7026970.html
Copyright © 2011-2022 走看看