sts 明明导包正确却报错_这真是危险的关系,明明你错了,但是她认了!

初学者学习R语言,必经之路报错,但是比报错更狠的是,明明你错了,但是她也认了。让你作出可用的图,但是数据全不对。
这个地方最大的坑就是R语言中的因子。

先讲第一个坑

假设我们这里有一个因子

dd q(126,129),3))
dd
a2c3aae515b5ff0d9f79bc10ef00784b.png

因子不能计算,所以我现在的需求是把他转为数值,用的是 as.numeric()函数
dd1 as.numeric(dd)
dd1
c2d1bb43c1b2a0bc7c216c8ce9c2daf4.png

然后我们崩溃了,跟想象中的完全不一样啊。
实际上此时 as.numeric()函数把factor变成了因子的水平了
那怎么办呢?

因子转数值,必须先转为字符串,再转为数值

dd2 as.numeric(as.character(dd))
dd2
7cc19e7c17f400a3955e6a79f0174f68.png

现在一切回归正常。
你犯了错,他不报错,但是有没有觉得很后怕呢?GEO芯如果数值都变成了因子,是不是感觉以前很有可能掉到坑里去了。别急,还有。
第二个坑

假设我们有一个数据框

set.seed(0625)
data q(1,500),26),
                   num2= sample(seq(1,500),26),
                   num3= sample(seq(1,500),26))
rownames(data) data 
5e369f23aa2526822f9c01f4001a296f.png

这是一个数据框,R语言里面最常用的数据结构,列的名称是26个字母。

现在我想选择其中的几列,就使用列名去调取,分别是:"U","P","Y","T","M"

genelist "U","P","Y","T","M"))

我们课上讲过,截取数据有三种方式,分别是位置,逻辑和名称,

f8e1618368715fcbdcd48116e37d0aba.png

我们手上的是名称,那么就很好办了,直接有什么用什么。
data1 <- data[,genelist]

预想的数据应该是这样的

61c90ee7d4ccd42a0f5ecf106db74f39.png

如果简单作图应该是这样的:
8395ecbfbf8f2b82be63cc9302f6de89.png
但是,实际情况是这样的!
9eedafd98c7a6e79912b7660bf71b228.png

简单作图后肯定是不一样的:
0c962b31a5faa838b17dc293c43792bd.png

问题很严重对吧,他居然选择了完全不一样的列!
为什么呢?

还不是因子惹出来的货!
我们看一下,genelist的属性

930d09d1350881e202975b1bb3b26b0d.png

这几个字母是因子,而因子是不能用来作为名称获取数据框的列的。

但你非要硬上, R语言默许了你的行为,并尝试去理解你的意图,最终选择先帮你转为数值再来获取,结果就是你俩触犯天条被二郎神追杀。

整个过程就变成了这样:

data2 data[,as.numeric(genelist)]
如何获取正确的结果?

第一,解决当下的困境,先把因子转为字符串

data3 data[,as.character(genelist)]

第二,防患未然,从源头上解决
发生这种情况大概率是你把基因列表先写成了txt文件,然后没有添加stringsAsFactors = F这个参数就读取进来了。
记得添加这个参数,或者使用data.table::fread()来智能无参数读取文件。

也可以在每次所有操作之前,运行一下这个语句,全局限定。

options(stringsAsFactors = F)

第三,习惯成自然,出图前,不要把数据读来读去
save函数把所有的中间文件保存为.Rdata格式,使用的时候load进来就可以了。
你从来没有把做好的PPT保存为word吧?那么为什么喜欢把R语言里面的数据保存为其他格式呢?
好了,我是果子,我们明天见。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值