Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >有没有一种方法可以使用R中的应用函数来优化这个循环?

有没有一种方法可以使用R中的应用函数来优化这个循环?
EN

Stack Overflow用户
提问于 2020-06-23 17:46:01
回答 2查看 21关注 0票数 0

我在R中有以下两个数据帧:

代码语言:javascript
运行
AI代码解释
复制
> head(gene)

    V1        V2 V3
1 chr2 178525989 10
2 chr2 178525990 10
3 chr2 178525991 10
4 chr2 178525992 10
5 chr2 178525993 10
6 chr2 178525994 10

> head(exons)

    V1  V2          V3        V4        V5 V6 V7 V8  V9
1 chr2 lrg exonic_part 178807212 178807423  .  -  . 001
2 chr2 lrg exonic_part 178804552 178804655  .  -  . 002
3 chr2 lrg exonic_part 178802138 178802341  .  -  . 003
4 chr2 lrg exonic_part 178800395 178800682  .  -  . 004
5 chr2 lrg exonic_part 178799825 178799910  .  -  . 005
6 chr2 lrg exonic_part 178799487 178799731  .  -  . 006

exons$V4exons$V5中的每一对表示范围的开始和结束。在exons中有364行,因此有364行。

我需要做的是检查gene$V2的每个元素,并检查它是否包含在exons中的任何一个范围内。如果包含它,我需要在另一个向量中添加一个外显子条目,如果它被排除了,我需要在该向量中添加一个“内含子”条目。

因此,例如,如果gene$V2的前三个元素至少包含在一个范围内,而接下来的三个元素没有包含在内,我希望得到这样的向量:

代码语言:javascript
运行
AI代码解释
复制
> include_exclude[1:6]
[1] "exon" "exon" "exon" "intron" "intron" "intron"

目前,我正在使用来自inside.range()spatstat.utils函数来完成此操作,该函数接受一个或多个要检查(x)和一个范围(r)的值,并输出TRUE (如果在范围内)和FALSE (超出范围)。我将它与循环中的循环一起使用:

代码语言:javascript
运行
AI代码解释
复制
include_exclude <- c()
for (i in 1:dim(gene)[1]){
        list <- c()
        for (x in 1:dim(exons)) {
                list <- c(list,inside.range(as.numeric(gene$V2[i]),as.numeric(exons[x,4:5])))
        }
        if (sum(list) > 0) {include_exclude <- c(include_exclude, "exon")}
        else {include_exclude <- c(include_exclude, "intron")}
        print(i) #to see how far along the loop is
}

然而,这显然是一种极其低效的做法。我怀疑在R中使用一个apply函数的效率要高得多,但我从来没有真正理解它们,也不知道如何在这种情况下使用它们。有人能帮忙吗?

谢谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-06-23 17:55:41

如果您的每个gene$V2都在exons$V4$V5中的至少一个范围内,这将返回。

代码语言:javascript
运行
AI代码解释
复制
sapply(gene$V2, function(v) any(exons$V4 <= v & v <= exons$V5, na.rm = TRUE))
# [1] FALSE FALSE FALSE FALSE FALSE FALSE

很容易将其转换为"exon""intron" (使用ifelsedplyr::if_elsedata.table::fifelse或仅使用向量查找),如

代码语言:javascript
运行
AI代码解释
复制
rets <- sapply(gene$V2, function(v) any(exons$V4 <= v & v <= exons$V5, na.rm = TRUE))
ifelse(rets, "exon", "intron")
# [1] "intron" "intron" "intron" "intron" "intron" "intron"
c("intron", "exon")[ 1 + rets ]
# [1] "intron" "intron" "intron" "intron" "intron" "intron"
票数 0
EN

Stack Overflow用户

发布于 2020-06-23 17:54:10

您可以使用V4V5列创建一个序列,并检查gene$V2中是否存在该值,并相应地分配该值。

代码语言:javascript
运行
AI代码解释
复制
all_sequence <- unique(unlist(Map(`:`, exons$V4, exons$V5)))
gene$include_exclude <- ifelse(gene$V2 %in% all_sequence, 'exon', 'intron')

使用ifelse很容易理解,但是不需要ifelse也可以做到这一点。

代码语言:javascript
运行
AI代码解释
复制
gene$include_exclude <- c('intron', 'exon')[(gene$V2 %in% all_sequence) + 1]
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62546334

复制
相关文章
本地Web服务器搭建[通俗易懂]
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/140871.html原文链接:https://javaforall.cn
全栈程序员站长
2022/09/01
6.2K0
同一主机上启动多台MySQL服务器
在同一个物理主机上启动多台MySQL服务器,通常也称为单机多实例。部署单机多实例可以用于测试新版本的功能、测试复制功能、高可用性等目的。用户可以通过启动mysqld或者mydqld_safe并指定不同的配置文件来启动,例如,
MySQLSE
2023/08/31
2870
同一主机上启动多台MySQL服务器
嵌入式Web服务器移植
第一步Boa程序的移植1、下载Boa源码   下载地址:http://www.boa.org/网络
Java架构师必看
2021/03/22
1.2K0
本地计算机上的task scheduler服务启动后停止_task
1.如果对应服务依赖都正常情况下,请参考下面解决方案 进入注册表(cmd–> regedit ,依次找到 HKEY_LOCAL_MACHINE\HKEY_LOCAL_MACHINE\SOFTWARE\MICROSOFT\RPC\INTERNET,删除INTERNET,重启服务器 注:删除前请导出备份
全栈程序员站长
2022/11/18
3.2K0
python之本地web服务器搭建
作为服务器,就是收到客户端的请求,发送数据。其实前面我已经做了几个服务器的例子,但只是知其然,不知其所以然。虽然确实实现了客户端和服务端的通信,可是好像和我平时真正访问互联网不一样。
用户8639654
2021/08/19
2.4K0
pycharm本地远程连接服务器,并在本地调试服务器代码
以pycharm professional 2019.1版本为例(使用学校邮箱注册,可以走教育通道) 本地系统:Ubuntu16.04
烤粽子
2021/07/07
7.9K0
pycharm本地远程连接服务器,并在本地调试服务器代码
Web安全需要会写代码吗?
Web程序漏洞的存在,是建立在Web程序运行的基础之上的。测试人员可以通过尝试给Web程序提供的不同的输入数据, 尝试让Web程序出错,这本质上,相当于对Web程序,进行基于特定数据输入的功能性黑盒测试,故意针对Web程序,提供可能会造成出错的输入数据,让Web程序产生,所谓的“漏洞”现象,并可以复现漏洞,并且利用程序的出错,获得程序所在计算机的更大的用户权限、或者达到其他的目的。
糖果
2021/07/19
9160
如何启动一个本地静态服务器
背景 学习前端开发,想要调试静态页面以及js,发现直接本地打开会有跨域异常。因此,需要启动一个静态服务器,只负责当前目录的文件路由。 目前尝试了两种方式。一种是Nginx, 一种是NodeJS服务器。最终推荐NodeJS。 1. Nginx启动静态页面 1.1. 安装 下载安装Nginx,在Mac下安装如下: brew install nginx 1.2 配置 Mac通过brew安装后的配置文件位于:/usr/local/etc/nginx. 修改端口和文件目录: server { list
Ryan-Miao
2018/03/13
3.8K1
使用Gradle在嵌入式Web容器Jetty中运行Web应用
在 Maven 等构建的项目中,我们要使用 Jetty 做嵌入式 Web 容器运行 Web 应用,通常需要添加 Jetty 相关依赖以及进行类似下面代码配置:
三产
2021/01/12
1.8K0
Windows 10 本地 IIS Web服务器搭建
启用功能 ① 右击 我的电脑 点击 属性,进入 windows 10 控制面板。 然后点击 控制面板
全栈程序员站长
2022/08/26
10.5K0
Windows 10 本地 IIS Web服务器搭建
如何启动一个本地静态服务器
学习前端开发,想要调试静态页面以及js,发现直接打开本地会有跨域异常,因此需要启动一个静态服务器,只负责当前目录的文件路由,
木子星兮
2020/07/16
3.2K0
Java 在本地配置https服务器
一:为服务器生成证书 1 切换到jdk安装目录 keytool -genkey -v -alias tomcat -keyalg RSA -keystore tomcat.keystore -
爱明依
2019/03/12
2.4K0
apollo本地启动
使用apollo最新的1.1版本:https://github.com/ctripcorp/apollo 导入idea设置启动配置
似水的流年
2019/12/07
2.1K0
本地启动zookeeper[通俗易懂]
https://pan.baidu.com/s/11buIVEen0vRjJNiBxdoSbw
全栈程序员站长
2022/11/01
1.2K0
在web网页上打开电脑本地exe应用
2、在 HKEY_CLASSES_ROOT 下新增一项 SSOPluginsFile.myp, 这个可以自定义命名,但需要和上方测试的html代码中a标签的href属性保持一致
星辰sea
2023/06/10
2.5K0
在web网页上打开电脑本地exe应用
无法启动iis express web服务器解决
VS2013 、VS2015 、VS2017调试出现无法启动iis express web服务器
用户7053485
2020/03/19
5.5K0
Android 在本地应用 启动抖音(进入主页)
上才艺 我用的是mumu模拟器,每次打开抖音的时候 都会提示你版本的问题,大家可以忽略.
全栈程序员站长
2021/04/07
2.1K0
在vs code中进行本地调试和开启本地服务器
一 在vs code中进行本地调试 1、首先在VSCode 上装一个插件:Debugger for Chrome ,如下图所示:在搜索框中输入Debugger for Chrome 然后点击安装
全栈程序员站长
2022/08/04
2K0
嵌入式服务器jetty,让你更快开发web
静默虚空
2018/01/05
2.3K0
点击加载更多

相似问题

Graphhopper API可以脱机使用吗?(嵌入式模式)

05

无法在本地主机上启动Go服务器

13

“在本地主机上启动TomcatV7.0服务器”没有启动

11

在本地服务器启动后启动web浏览器

10

代码不在web主机上工作,而是在本地主机上工作。

11
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档