如何删掉R列表里面的空元素
2021-04-10 本文已影响0人
生信交流平台
前面我们讲过
☞R批量预测miRNA和靶基因之间的调控关系-ENCORI篇
☞R批量预测miRNA和靶基因之间的调控关系-TargetScan篇
思路就是将所有miRNA的靶基因做成一个以miRNA名字来命名的列表,批量预测你自己候选miRNA的靶基因,就只需要取这个列表的子集就可以了。
可能有些小伙伴用这个方法去预测的时候,会遇到一个warning,原因就是你的候选miRNA不在我们的列表里面。你去取子集的时候,得到的结果列表里面会有空元素。对于包含空元素的列表去做stack(☞R中的stack和unstack函数)的时候,就会出现下面这个warning。这个警告并不会影响我们最后的结果,但是有些小伙伴可能有强迫症,不想看到任何警告
![](https://img.haomeiwen.com/i24747866/ad007d3a19a061d4.png)
那么今天我们就来给大家介绍两种去除列表里面空元素的方法
我们先来生成一个列表,这个列表有三个元素,名字分别为a,b和d。
data=list(a=1:5,b=letters[1:6],d=2:4)
![](https://img.haomeiwen.com/i24747866/04ce3ffad301aedb.png)
接下来我们来模拟取子集的过程,假设我们要取的子集的名字为"a","b","e",很显然,这里的e不在我们的列表里面。所以返回的结果里面会有一个空元素。如果你拿这个包含空元素的列表去stack就会出现上面的error
id=c("a","b","e")
result=data[id]
![](https://img.haomeiwen.com/i24747866/0ce74257128de75a.png)
stack(result)
虽然有一个warning,但你你会发现结果是没有问题的。
![](https://img.haomeiwen.com/i24747866/b34f18101940da08.jpg)
接下来我们来看看,如何消除这个warning
方法一、判断列表的name是否为NA
#此时不存在的id,name为NA,取name不是NA的元素
result=result[!is.na(names(result))]
result
![](https://img.haomeiwen.com/i24747866/9ef37d8ae6d6bb8e.png)
再去stack就没有任何问题了
![](https://img.haomeiwen.com/i24747866/498c5edd99365448.jpg)
方法二、判断列表元素的内容是否为NULL
data=list(a=1:5,b=letters[1:6],d=2:4)
id=c("a","b","e")
result=data[id]
#先把id赋给list的name,再通过判断内容是否为null来过滤
names(result)=id
result=result[!sapply(result,is.null)]
result
跟上一种方法得到的结果是一样的,再去stack也没有任何警告了。
![](https://img.haomeiwen.com/i24747866/1ed734e6eafa0626.png)
参考资料:
1.R批量预测miRNA和靶基因之间的调控关系-ENCORI篇