当前位置: 首页 > news >正文

python、R、shell兼容1

一,兼容方式

1,shell中用R、python:
(1)python3、R/r(radian)进入

(2)脚本封装:命令行或者封装到sh脚本中

python xxx.py + 自定义参数

Rscript xxx.r + 自定义参数

2,R中用shell、python:略,不必子集兼容全集

3,python中用R、shell:

以jupyter notebook为主

(1)jupyter notebook中用shell:
magic command:

参考我之前的博客https://blog.csdn.net/weixin_62528784/article/details/145395867

另外用得很多的就是os、subprocess等模块,
可以参考https://www.runoob.com/w3cnote/python3-subprocess.html

(2)jupyter notebook中用R:
R kernel(IRkernel):

参考我之前的博客https://blog.csdn.net/weixin_62528784/article/details/145092632

但是在不同内核之间不断切换,容易造成python以及R的环境变量之间无法传递;

比如说我在python中机器学习处理之后得到了1个矩阵数据,变量假如为matrix1,如果我需要切换环境到R,使用tidyverse中的ggplot2来可视化这个数据,这个时候内核切换,变量matrix1就无法穿给R,我在R中的流程就中断了。

这个例子举的有点一般,我的意思是如果不把变量导出为R或者python中都能够直接读取的数据格式,比如说csv或者是tsv,而是其他比较特殊的数据格式,

比如说scRNA-seq分析中Scanpy中的AnnData对象到Seurat中的SingleCellExperiment,从理论上来讲,我们产出的在任何python或者R特定软件中的特定变量,实际上都是有一定的数据结构的,我们其实并不在意形式,我们可以以任何形式重新编排格式,只要保留其中的数据信息即可,然后将其中的数据格式以通用的文本文件格式输出,可以达到在不同编程语言之间通用;

这实际上就是一些工具开发的本质,比如说anndata2ri就能够将Scanpy中的AnnData对象到Seurat中的SingleCellExperiment,本质上这也是1个包或者一个库,我们可以在数据产生、离开数据处理流程的任意阶段进行数据转换处理,

但这毕竟已经达到了1个软件开发的难度了,我们可能会在python以及R生态中遇到和这个一样或者是越来越难hard的情况,我们不能也无法从简单的方法论角度来处理不同生态之间格式转换的问题(你可以调1个包或者导入1个库,越复杂的流程,你需要处理的情况就越复杂,导入更多的库或者更多的包?随着你环境中的变量越来越多,牵一发动全身,你不可能任何时刻跨模态的时候都保证R或者python前后的snapshot都一致,你的情景一旦变了没法轻易复原)。

所以最佳方法就是将两个生态融合起来,我们不谈下游的文件、我们不脱离数据流程来单独考虑数据格式怎么转换,我们的需求很简单,所见即所得,在python中的变量我们直接在R中处理,在R中获取的变量,我们直接传到python的数据生态中,但是python、R之间我们不切换内核,我们想写R它就按照R执行、我们想写python它就按照python处理,我们一直都在同一个cell中,我们的执行过程一直在同一条road上,我们不off-track

——》这就是我这篇博客介绍的重点:https://github.com/rpy2

4,rpy2(Bridge between Python and R)

参考:

https://github.com/rpy2

https://rpy2.github.io/

https://github.com/rpy2/rpy2

介绍:这是1个python库,所以我们的执行环境依然在python中(即all in one jupyter-notebook,因为我坚信python才是生信的大一统语言,就试问R中用shell或python麻不麻烦、可不可行,反过来python开发社区庞大,都有对应的方法开发);

rpy2是嵌入在Python进程中的R运行接口

我们可以看到很多生物方面的文献发表,在交互生态上也在逐渐增加这方面的需求:

https://rpy2.github.io/use-cases.html

pip install rpy2

对应的文档:

下面这一部分是快速入门:

https://rpy2.github.io/doc/latest/html/getting-started.html

二,rpy2入门:

我先把一些最常用的trick放在最前面,想要在python中用R,

# 在导入模块import的部分,需要以下命令
import rpy2
%load_ext rpy2.ipython# 其余需要写R code的部分,建议分开来,1个cell 1个R code,尽量和python分离,就像Rmd中的chunk一样
%%R
# 在%%R后面写任何你想写的R code,格式和语法和R中一样

安装R包的话,一样糊涂,装包这块一直都是个shi一样麻烦的问题,建议还是使用conda

假设现在已经安装好了:

看到了吗?下面这里就是我想要的在数据层面互通兼容的效果!

这就是我想要的结果,简单例子:

%%R
test_data %>% pivot_longer(cols=c("N","TN","T"),names_to="type",values_to="count")  %>% ggplot(mapping = aes(x=Sample,y=count,group=type)) +geom_bar(stat="identity",aes(fill=type),position = "dodge") + theme(axis.text.x = element_text(angle = 45, hjust = 1)) + labs(x="Sample",y="count") + scale_fill_manual(values=c("#FF9999","#66B3FF","#99FF99")) + theme(legend.position="top")

上面是快速应用,但是不全面,下面是理论体系部分,我会慢慢补全:

https://rpy2.github.io/doc/latest/html/getting-started.html

1,安装以及升级的一些指南:
https://rpy2.github.io/doc/v3.5.x/html/overview.html#background

2,模块组成层级结构:

3,rpy2入门:

在sc-python以及r-jupyter环境中安装,你可以选择在任意1个环境中pip install,我仅测试环境使用:

可以在命令行中查看各个版本信息,python以及R的版本

然后我是因为没有在全局安装R,可以在rpy2的环境中再安装r-base(conda),使用同一个环境的:

所以我们的核心就是rpy2.robjects接口,导入该子库即可

import rpy2.robjects as robjects

4,对R包的使用:

我想R包应该是R的核心了,也是很多人使用R生态比较看重的核心部分之一

(1)导入R包:

(2)安装R包:

完整的部分,应该从导入utils,到选择镜像,再使用install.packages安装R包:

我们可以看到:

很经典的R的help函数能够使用,而且我此时使用的是python,不是R内核!

没啥好说的了,我在上海,我就选23:

整体代码如下:

# 导入rpy2的包模块
import rpy2.robjects.packages as rpackages# 导入R的utility包
utils  = rpackages.importr("utils")# 选择R包镜像,23是上海
utils.chooseCRANmirror(ind=23)# 接下来现在可以使用 R 自带的函数 install.package 来安装软件包# 列出要安装的R包名
packnames = ('tidyverse') # 字符串向量,当然在python中这个是元组# 字符串的R向量,参考下面的处理,实际上是我们在R的install.packages()中使用的是c(),即我们实际调用的是install.packages(c())形式,所以我们需要strvector转换后的R格式的向量
from rpy2.robjects.vectors import StrVector# 选择性安装需要安装的R包,下面是列表生成式
names_to_install = [x for x in packnames if not rpackages.isinstalled(x)]
if len(names_to_install) > 0:utils.install_packages(StrVector(names_to_install))

但这样实际上是没有装上:

其中strvector:

主要见下区别:

5,R示例(R对象):
这个是我们实际需要在python和R交互中的核心目标,因为我们就是要将R或者是python中处理得到的对象进行交互:

6,评估R代码

7,R中最主要的数据,或者说最常用的数据是向量vector——》c():
创建向量:

# 字符串向量
robjects.StrVector(["str1","str2"])
robjects.StrVector(["str1","str2"]).r_repr()# 整数向量
robjects.IntVector([1,2,3])
robjects.IntVector([1,2,3]).r_repr()# 浮点数向量
robjects.FloatVector([1.1,2.2,3.3])
robjects.FloatVector([1.1,2.2,3.3]).r_repr()

由向量创建矩阵:

相关文章:

python、R、shell兼容1

一,兼容方式 1,shell中用R、python: (1)python3、R/r(radian)进入 (2)脚本封装:命令行或者封装到sh脚本中 python xxx.py 自定义参数 Rscript xxx.r 自…...

Oracle 11G RAC重启系统异常

vmware安装centos7环境部署Oracle RAC (11.2.0.4) 部署时所有资源情况都是正常的,关机重启虚拟机后集群资源状态异常,请教CSDN大佬 – 部署规划 域名地址备注rac16192.168.31.16rac17192.168.31.17rac16vip192.168.31.26viprac17vip192.168.31.27vip…...

便捷的电脑自动关机辅助工具

软件介绍 本文介绍的软件是一款电脑上实用的倒计时和关机助手。 软件特性 这款关机助手十分贴心,它是一款无需安装的小软件,体积仅60KB,不用担心占用电脑空间,打开即可直接使用。 操作方法 你只需设置好对应的关机时间&#x…...

巧用 FFmpeg 命令行合并多个视频为一个视频文件教程

你是否曾经遇到过需要将多个视频片段合并成一个连续视频的情况?比如,你拍摄了一段旅行的精彩瞬间,想把它们合成一部短片;或者你在制作教学视频时,希望将不同的部分整合在一起。这时候,FFmpeg 就是你的得力助…...

平时使用电脑,如何去维护

在这个数字化的时代,电脑已经成为我们生活和工作中不可或缺的一部分。然而,你是否知道如何正确地维护它,让它始终保持良好的运行状态呢?今天,就让我来为大家揭晓这个谜底。定期清理电脑内部和外部的灰尘是至关重要的。…...

(视觉)分类、检测与分割在不同网络中的设计体现

分类、检测与分割在不同网络中的设计体现 概述 在计算机视觉领域,不同的网络结构在功能和结构上差异显著,同时也共享一些基础设计元素。 卷积神经网络是基石: 卷积层通过特定的卷积核与图像进行卷积运算提取图像中的局部特征,比…...

技术分享 | MySQL大事务导致数据库卡顿

本文为墨天轮数据库管理服务团队第66期技术分享,内容原创,作者为技术顾问孙文龙,如需转载请联系小墨(VX:modb666)并注明来源。 一、现 象 业务侧反馈连接数据库异常,报错 connection is not av…...

C#在 .NET 9.0 中启用二进制序列化:配置、风险与替代方案

在 .NET 9.0 中启用二进制序列化:配置、风险与替代方案 引言一、启用二进制序列化的步骤二、实现序列化与反序列化三、安全风险与缓解措施四、推荐替代方案五、总结 引言 在 .NET 生态中,二进制序列化(Binary Serialization)曾是…...

每日Prompt:像素风格插画

提示词 像素风格插画,日式漫画脸,画面主体为一位站在路边的男孩,人物穿着黑色冲锋衣,手里拿着手机,男孩靠坐在机车旁边,脚边依偎着一只带着小摩托车头盔的小小猫,背景是雨中,身旁停…...

Rust 学习笔记:生命周期

Rust 学习笔记:生命周期 Rust 学习笔记:生命周期使用生命周期防止悬空引用借用检查器函数中的泛型生命周期生命周期注释语法函数签名中的生命周期注解从生命周期的角度思考结构定义中的生命周期注解省略生命周期方法定义中的生命周期注释静态生命周期泛型…...

科学标注法:数据治理的未来之路

在数据治理领域,科学标注法是一种系统化、标准化的数据标注方法论,其核心是通过规范化的流程、技术工具和质量控制机制,将原始数据转化为具有语义和结构特征的可用数据资源。以下从定义、技术特征、应用场景、与传统标注方法的区别以及遵循的标准框架等方面展开详细解析: 一…...

小白刷题 之 如何高效计算二进制数组中最大连续 1 的个数

前言 学习如何快速找出二进制数组中最长的连续 1 序列。 这个问题在数据处理、网络传输和算法面试中经常出现,掌握它不仅能提升编程能力,还能加深对数组操作和循环控制的理解。 🌟 问题背景 想象你是一位网络工程师,正在分析服…...

中科方德鸳鸯火锅平台使用教程:轻松运行Windows应用!

原文链接:中科方德鸳鸯火锅平台使用教程:轻松运行Windows应用! Hello,大家好啊,今天给大家带来一篇中科方德鸳鸯火锅平台使用的文章,欢迎大家分享点赞,点个在看和关注吧!在信创环境…...

完全禁用 Actuator 功能

问题描述: springboot 关闭Actuator无效,原本设置 management:endpoints:enabled-by-default: false # 禁用所有端点屏蔽了/actuator/info和/actuator/health,但/actuator还可以访问。 拉满配置如下,成功屏蔽 # application.y…...

Netty学习专栏(二):Netty快速入门及重要组件详解(EventLoop、Channel、ChannelPipeline)

文章目录 前言一、快速入门:5分钟搭建Echo服务器二、核心组件深度解析2.1 EventLoop:颠覆性的线程模型EventLoop 设计原理核心 API 详解代码实践:完整使用示例 2.2 Channel:统一的网络抽象层Channel 核心架构核心 API 详解代码实践…...

27-FreeRTOS的任务管理

一、FreeRTOS的任务概念 在FreeRTOS中,任务(Task)是操作系统调度的基本单位。每个任务都是一个无限循环的函数,它执行特定的功能。任务可以被看作是一个轻量级的线程,具有自己的堆栈和优先级。下面是如何定义一个任务函…...

upload-labs靶场通关详解:第14关

一、分析源代码 这一关的任务说明已经相当于给出了答案,就是让我们上传一个图片木马,可以理解为图片中包含了一段木马代码。 function getReailFileType($filename){$file fopen($filename, "rb");$bin fread($file, 2); //只读2字节fclose…...

supervisor的进程监控+prometheus+alertmanager实现告警

supervisor服务进程监控实现告警 前提:部署了prometheus(配置了rules文件夹),alertmanager,webhook,python3环境 [roottest supervisor_prometheus]# pwd /opt/supervisor_prometheus [roottest supervisor_prometheus]# ls supervisor_exporter.py supervisor_int…...

HarmonyOS 鸿蒙应用开发基础:父组件调用子组件方法的几种实现方案对比

在ArkUI声明式UI框架中,父组件无法直接调用子组件的方法。本文介绍几种优雅的解决方案,并作出对比分析,分析其适用于不同场景和版本需求。帮助开发者在开发中合理的选择和使用。 方案一:Watch装饰器(V1版本适用&#x…...

Enhancing Relation Extractionvia Supervised Rationale Verifcation and Feedback

Enhancing Relation Extraction via Supervised Rationale Verification and Feedback| Proceedings of the AAAI Conference on Artificial Intelligencehttps://ojs.aaai.org/index.php/AAAI/article/view/34631 1. 概述 关系抽取(RE)任务旨在抽取文本中实体之间的语义关...

等离子体隐身技术和小型等离子体防御装置设计

相信大家前不久都看到了关于国防科大团队关于等离子体防御的相关文章,恰好也在做相关的研究,所以想向对这个问题感兴趣的朋友聊一聊这里面的一些基本原理和研究现状。 等离子体与电磁波的相互作用 等离子体会对电磁波产生吸收和反射作用,通常…...

PCB设计教程【入门篇】——电路分析基础-电路定理

前言 本教程基于B站Expert电子实验室的PCB设计教学的整理,为个人学习记录,旨在帮助PCB设计新手入门。所有内容仅作学习交流使用,无任何商业目的。若涉及侵权,请随时联系,将会立即处理 一、电路基本概念 连接线与节点 …...

C++-继承

1.继承的概念及定义 1.1继承的概念 继承(inheritance)机制是面向对象程序设计使代码可以复用的最重要的手段,它允许程序员在保持原有类特性的基础上进行扩展,增加功能,这样产生新的类,称派生类。继承呈现了面向对象 程序设计的层…...

25.5.22学习总结

ST表(Sparse Table,稀疏表)是一种用于高效解决静态区间最值查询(RMQ)问题的数据结构。其核心思想是通过预处理每个长度为2^j的区间的最值,使得查询时只需合并两个子区间的最值即可得到结果,从而…...

接口自动化测试框架(pytest+allure+aiohttp+ 用例自动生成)

🍅 点击文末小卡片,免费获取软件测试全套资料,资料在手,涨薪更快 近期准备优先做接口测试的覆盖,为此需要开发一个测试框架,经过思考,这次依然想做点儿不一样的东西。 接口测试是比较讲究效率的…...

FastAPI在 Nginx 和 Docker 环境中的部署

目录 实现示例1. 项目结构2. FastAPI 应用 (app/main.py)3. 依赖文件 (app/requirements.txt)4. Dockerfile5. Nginx 配置 (nginx/nginx.conf)6. Docker Compose 配置 (docker-compose.yml) 使用方法修改代码后更新 实现示例 接下来创建一个简单的示例项目,展示如何…...

08 接口自动化-用例管理框架pytest之fixtrue,conftest.py,allure报告以及logo定制

文章目录 一、使用fixture实现部分前后置1.function级别:在每个函数的前后执行2.class级别:在每个类的前后执行一次3.module级别:在每个模块的前后执行一次4.package、session级别,一般是和connftest.py文件一起使用 二、当fixture的级别为pa…...

Appium+python自动化(二)- 环境搭建—下

简介 我这里已经将android的测试开发环境已经搭建准备完毕。上一篇android测试开发环境已经准备好, 那么接下来就是appium的环境安装和搭建了。 搭建环境安装过程中切勿浮躁,静下心来一个一个慢慢地按照步骤一个个来。 环境装好后,可以用真机…...

浅谈测试驱动开发TDD

目录 1.什么是TDD 2.TDD步骤 3.TDD 的核心原则 4.TDD 与传统开发的对比 5.TDD中的单元测试和集成测试区别 6.总结 1.什么是TDD 测试驱动开发(Test-Driven Development,简称 TDD) 是一种软件开发方法论,核心思想是 “先写测试…...

MVC和MVVM架构的区别

MVC和MVVM都是前端开发中常用的设计模式,都是为了解决前端开发中的复杂性而设计的,而MVVM模式则是一种基于MVC模式的新模式。 MVC(Model-View-Controller)的三个核心部分:模型、视图、控制器相较于MVVM(Model-View-ViewModel)的三个核心部分…...

网络安全-等级保护(等保) 3-1-1 GB/T 28448-2019 附录A (资料性附录)测评力度附录C(规范性附录)测评单元编号说明

附录A (资料性附录)测评力度 A.1 概述 测评力度是在等级测评过程中实施测评工作的力度,体现为测评工作的实际投入程度,具体由测评的广度和深度来反映。测评广度越大,测评实施的范围越大,测评实施包含的测评对象就越多。测评深度…...

MySQL 可观测性最佳实践

MySQL 简介 MySQL 是一个广泛使用的开源关系型数据库管理系统(RDBMS),以其高性能、可靠性和易用性而闻名,适用于各种规模的应用,从小型网站到大型企业级系统。 监控 MySQL 指标是维护数据库健康、优化性能和确保数据…...

深入解析Spring Boot与Redis集成:高效缓存与性能优化

深入解析Spring Boot与Redis集成:高效缓存与性能优化 引言 在现代Web应用中,缓存技术是提升系统性能的重要手段之一。Redis作为一种高性能的内存数据库,广泛应用于缓存、会话管理和消息队列等场景。本文将详细介绍如何在Spring Boot项目中集…...

《C 语言字符串操作从入门到实战(下篇):strncpy/strncat/strstr 等函数原理与实现》

目录 七. strncpy函数的使用与模拟实现 7.1 strncpy函数理解 7.2 strncpy函数使用示例 7.3 strncpy函数模拟实现 八. strncat函数的使用与模拟实现 8.1 strncat函数理解 8.2 strncat函数使用示例 8.3 strncat函数模拟实现 九. strncmp函数的使用 9.1 strncmp函数理…...

百度智能云千帆AppBuilder RAG流程技术文档

一、概述 本文档旨在详细阐述百度智能云千帆AppBuilder的RAG(Retrieval-Augmented Generation,检索增强生成)流程,包括API对接、知识库维护以及文档资料管理等关键环节。通过本流程,开发者可以高效地构建基于大模型的…...

程序编辑器快捷键总结

程序编辑器快捷键总结 函数跳转 函数跳转 Creator : F2VSCode : F12visual Studio : F12...

MySQL中实现大数据量的快速插入

一、SQL语句优化​ 1. ​批量插入代替单条插入​ ​单条插入会频繁触发事务提交和日志写入,效率极低。​批量插入通过合并多条数据为一条SQL语句,减少网络传输和SQL解析开销。 -- 低效写法:逐条插入 INSERT INTO table (col1, col2) VALUE…...

从零基础到最佳实践:Vue.js 系列(8/10):《性能优化与最佳实践》

引言 Vue.js 是一个轻量、灵活且易于上手的现代前端框架,因其响应式数据绑定和组件化开发而广受欢迎。然而,随着项目规模的增长,性能问题逐渐显现,例如首屏加载缓慢、页面渲染卡顿、内存占用过高等。性能优化不仅能提升用户体验&…...

欧拉降幂(JAVA)蓝桥杯乘积幂次

这个题可以使用欧拉降幂,1000000007是质数,所以欧拉函数值为1000000006. import java.util.Scanner; // 1:无需package // 2: 类名必须Main, 不可修改public class Main {public static void main(String[] args) {Scanner scanner new Scanner(System…...

Mysql的MVCC机制

MySQL的MVCC机制主要通过以下几个关键要素来工作: 数据版本与隐藏列 - MySQL InnoDB存储引擎会在每行数据中添加几个隐藏列,用于实现MVCC。其中包括 DB_TRX_ID 列,记录最后一次修改该行数据的事务ID; DB_ROLL_PTR 列&#xff…...

spring中的BeanFactoryAware接口详解

一、接口定义与核心作用 BeanFactoryAware 是 Spring 框架提供的一个回调接口,允许 Bean 在初始化阶段获取其所属的 BeanFactory 实例。该接口定义如下: public interface BeanFactoryAware {void setBeanFactory(BeanFactory beanFactory) throws Bea…...

mysql 创建用户,创建数据库,授权

创建一个远程用户 create user test% identified by test1111; 创建一个数据库并指定编码 create database testdb CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci; 授权 grant all privileges on testdb.* to test%; 应用更改: FLUSH PRIVILEGES; 注意…...

Android 网络全栈攻略(三)—— 从三方库原理来看 HTTP

前面两篇文章我们介绍了 HTTP 协议的请求方法、请求码以及常用的请求头/响应头的知识。本篇会从 OkHttp 配置的角度来看这些框架是如何实现 HTTP 协议的,目的是加深对 HTTP 的理解,并学习协议是如何落地的。我们会选取 OkHttp 中与协议实现相关的源码作为…...

BlazeMeter录制jmeter脚本

文章目录 chrome安装blazeMeter插件开始录制 chrome安装blazeMeter插件 开始录制 1、点击重置按钮 2、输入名称 3、点击开始录制 4、打开浏览器操作 5、回到录制页面点击stop(注意,不要在第四步操作的那个窗口点停止) 6、点击save 7、保存jmeter脚本 8、将jmeter脚…...

SQL的RAND用法和指定生成随机数的范围

SQL中的RAND函数能够满足多种随机数生成的需求。通过合理地使用种子、结合一些SQL语句,我们可以实现灵活的随机数生成。在数据填充、数据处理、数据分析中经常需要用RAND生成的随机数。 用法1 生成随机浮点数,其返回值在0(包括0)…...

PHP7内核剖析 学习笔记 第七章 面向对象

面向对象编程,简称OOP,是一种程序设计思想。面向对象把对象作为程序的基本单元,一个对象包含了数据和操作数据的函数。面向对象一直是软件开发领域内比较热门的话题,它更符合人类看待事物的一般规律。与Java不同,PHP并…...

地信GIS专业关于学习、考研、就业方面的一些问题答疑

整理了地信GIS专业学生问得最多的几个问题:关于GIS专业学习、考研以及就业方面;大家可以一起来探讨一下。 学习方面 1、 作为一名GISer需要哪些核心素养或能力? 答:GIS是个交叉学科,涉及到地理学、地质学、测绘、遥感…...

构建可重复的系统 - SRE 的 IaC 与 CI/CD 基础

构建可重复的系统 - SRE 的 IaC 与 CI/CD 基础 还记得我们在第一篇提到的 SRE 核心原则之一——减少琐事 (Toil) 吗?想象一下手动配置服务器、部署应用程序、管理网络规则……这些任务不仅耗时、重复,而且极易出错。当系统规模扩大时,手动操作很快就会变得难以为继。SRE 的核…...

CQF预备知识:一、微积分 —— 1.2.2 函数f(x)的类型详解

文中内容仅限技术学习与代码实践参考,市场存在不确定性,技术分析需谨慎验证,不构成任何投资建议。 📖 数学入门全解 本教程为复习课程,旨在帮助读者复习数学知识。教程涵盖以下四个主题: 微积分线性代数微…...

PyQt学习系列03-动画与过渡效果

PyQt学习系列笔记(Python Qt框架) 第三课:PyQt的动画与过渡效果 一、动画与过渡效果概述 1.1 动画与过渡的区别 动画(Animation):用于描述对象属性随时间变化的过程(如位置、颜色、大小&…...