读入并将 Python 列表从 R 中转换为 R 向量 - Reticulate

如何解决读入并将 Python 列表从 R 中转换为 R 向量 - Reticulate

我正在尝试使用 RStudio 中的 recticulate 读取 Python 列表对象并将其转换为 R 向量。根据 docs 的“在 R 和 Python 之间转换”部分,使用 py_to_r() 函数这应该是一项相当简单的任务。

这是我的代码。

library(reticulate)

my_list <- py_to_r(['prtHrt_snRNAseq_Cer-CycPro_SCZ_summary.tsv','prtHrt_snRNAseq_Cer-Endo_SCZ_summary.tsv','prtHrt_snRNAseq_Cer-ExN-Pro_SCZ_summary.tsv','prtHrt_snRNAseq_Cer-Granule-1_SCZ_summary.tsv','prtHrt_snRNAseq_Cer-Granule-2_SCZ_summary.tsv','prtHrt_snRNAseq_Cer-Granule-3_SCZ_summary.tsv','prtHrt_snRNAseq_Cer-Granule-4_SCZ_summary.tsv','prtHrt_snRNAseq_Cer-Granule-Pro_SCZ_summary.tsv','prtHrt_snRNAseq_Cer-InN-Pro-1_SCZ_summary.tsv','prtHrt_snRNAseq_Cer-InN-Pro-2_SCZ_summary.tsv','prtHrt_snRNAseq_Cer-MG_SCZ_summary.tsv','prtHrt_snRNAseq_Cer-N-undef-1_SCZ_summary.tsv','prtHrt_snRNAseq_Cer-N-undef-2_SCZ_summary.tsv'],TRUE)

然而,在尝试此 R 时无法解析此数据结构。

py_to_r(['prtHrt_snRNAseq_Cer-CycPro_SCZ_summary.tsv',Error: unexpected '[' in "py_to_r(["
>                  'prtHrt_snRNAseq_Cer-Granule-1_SCZ_summary.tsv',Error: unexpected ',' in "                 'prtHrt_snRNAseq_Cer-Granule-1_SCZ_summary.tsv',"
>                  'prtHrt_snRNAseq_Cer-Granule-4_SCZ_summary.tsv',' in "                 'prtHrt_snRNAseq_Cer-Granule-4_SCZ_summary.tsv',"
>                  'prtHrt_snRNAseq_Cer-InN-Pro-2_SCZ_summary.tsv',' in "                 'prtHrt_snRNAseq_Cer-InN-Pro-2_SCZ_summary.tsv',"
>                  'prtHrt_snRNAseq_Cer-N-undef-2_SCZ_summary.tsv'])
Error: unexpected ']' in "                 'prtHrt_snRNAseq_Cer-N-undef-2_SCZ_summary.tsv']"

python 列表来自蛇形规则的 expand 函数,我想将其输入到 R 脚本中。

有没有办法将这样的python列表结构转换为R对象,例如向量,在R中?

任何帮助/想法/建议将不胜感激。


根据@Dariober 的要求进行更新 - 29/0721


所以我有一个解决方法,我在 R 脚本中使用系统调用来创建一个 .csv 文件,该文件包含扩展函数在 snakemake 中生成的文件列表。然后我将其读入 R 并进行处理,就像我可以让 R 直接解析扩展函数的输出一样。

这是蛇形规则:

rule create_ldsc_group_plots:
    # R produces 5 plots but only tracking the final plot here 
    input:   expand(PART_HERIT_DIR + "prtHrt_snRNAseq_{CELL_TYPE}_SCZ.rds",CELL_TYPE = config["RNA_CELL_TYPES"])
    output:  PART_HERIT_DIR + "Thal_ldsc_RNA_group_plot_lst.rds"
    params:  out_dir = PART_HERIT_DIR 
    message: "Creating ldsc group plots for all regions and SCZ GWAS"
    log:     "logs/LDSR/snRNAseq.AllRegions.SCZ_partHerit.group.plots.log"
    shell:
             """
             export R_LIBS_USER=/R/library
             module load libgit2/1.1.0
             /apps/languages/R/4.0.3/el7/AVX512/gnu-8.1/bin/Rscript --vanilla \
             scripts/R/scRNAseq_LDSC_create_group_plots.R {params.out_dir}  2> {log}
             
             """

这是R代码的片段:

## Parse region / set region variable ---------------------------------------------------
cat('\nParsing args ... \n')
p <- arg_parser("Read out dir for LDSC RNA group plotting ... \n")
p <- add_argument(p,"out_dir",help = "No out dir region provided")
args <- parse_args(p)
print(args)

##  Set variables  ----------------------------------------------------------------------
REGIONS <- c("Cer","FC","GE","Hipp","Thal")
OUT_DIR <- args$out_dir


for (REGION in REGIONS) {
  
  plot_list <- list()
  
  ##  Create region specific .csv file  -------------------------------------------------
  cat(paste0("\nCreating ",REGION," .csv file ...\n"))   
  system(paste0("ls ",OUT_DIR,"*","*_SCZ.rds > ",".csv"))

  ##  Load and prep .rds file info  -----------------------------------------------------
  cat(paste0("Loading "," .rds file info ...\n"))
  rds_file_df <- read_csv(paste0(OUT_DIR,".csv"),col_names = FALSE)
  rds_file_vector <- pull(rds_file_df,X1) # pull equivalent to as.vector in dplyr

请注意,我正在通过 argparser 读取 R 脚本的参数。我尝试使用 {input} 作为 R 脚本的附加参数,但 argparser 需要单个输入,展开列表中有 91 个文件名。还要注意,我需要在运行 R 脚本之前加载一个额外的模块,这意味着我需要在规则中使用 shell 指令而不是 script,据我所知,我因此,无法在 R 脚本中使用 snakemake$input 函数。我已经测试过了。

Tbh 我现在有的解决方法虽然很脏,但确实有效。我之前从未发布过蛇形规则等的原因是我希望最初问题的答案是微不足道的,因此问题的结构简洁。我想另一个选择是使用带有 R 和安装在其中的必备软件包的虚拟环境,然后我可以运行 script 指令,但这对于管道末端的规则来说可能有点多旨在制作一些情节。

是否有一种简单的方法可以解决我没有看到的问题?

解决方法

我想问题在于您提供的函数 py_to_r 不是 python 对象(您在 R 中工作)。你可以试试这样的:

tuple(
  'prtHrt_snRNAseq_Cer-CycPro_SCZ_summary.tsv','prtHrt_snRNAseq_Cer-Endo_SCZ_summary.tsv','prtHrt_snRNAseq_Cer-ExN-Pro_SCZ_summary.tsv','prtHrt_snRNAseq_Cer-Granule-1_SCZ_summary.tsv','prtHrt_snRNAseq_Cer-Granule-2_SCZ_summary.tsv','prtHrt_snRNAseq_Cer-Granule-3_SCZ_summary.tsv','prtHrt_snRNAseq_Cer-Granule-4_SCZ_summary.tsv','prtHrt_snRNAseq_Cer-Granule-Pro_SCZ_summary.tsv','prtHrt_snRNAseq_Cer-InN-Pro-1_SCZ_summary.tsv','prtHrt_snRNAseq_Cer-InN-Pro-2_SCZ_summary.tsv','prtHrt_snRNAseq_Cer-MG_SCZ_summary.tsv','prtHrt_snRNAseq_Cer-N-undef-1_SCZ_summary.tsv','prtHrt_snRNAseq_Cer-N-undef-2_SCZ_summary.tsv'
) %>% 
  py_to_r()

显然这没有多大用处 - 您可以在不制作第一个 python 对象的情况下制作 R 对象。我认为函数 py_to_r 应该与返回 python 对象的 python 函数一起使用。

,

python 列表来自我想输入到 R 脚本中的一条蛇形规则的扩展函数。

也许你让事情变得比必要的复杂。假设您有:

rule one:
    input:
        fin= expand('...'),output:
        out= ...
    script:
        'my-script.R'

然后在 my-script.R 中访问文件列表 input.fin

fin <- snakemake@input[['fin']]

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


使用本地python环境可以成功执行 import pandas as pd import matplotlib.pyplot as plt # 设置字体 plt.rcParams[&#39;font.sans-serif&#39;] = [&#39;SimHei&#39;] # 能正确显示负号 p
错误1:Request method ‘DELETE‘ not supported 错误还原:controller层有一个接口,访问该接口时报错:Request method ‘DELETE‘ not supported 错误原因:没有接收到前端传入的参数,修改为如下 参考 错误2:cannot r
错误1:启动docker镜像时报错:Error response from daemon: driver failed programming external connectivity on endpoint quirky_allen 解决方法:重启docker -&gt; systemctl r
错误1:private field ‘xxx‘ is never assigned 按Altʾnter快捷键,选择第2项 参考:https://blog.csdn.net/shi_hong_fei_hei/article/details/88814070 错误2:启动时报错,不能找到主启动类 #
报错如下,通过源不能下载,最后警告pip需升级版本 Requirement already satisfied: pip in c:\users\ychen\appdata\local\programs\python\python310\lib\site-packages (22.0.4) Coll
错误1:maven打包报错 错误还原:使用maven打包项目时报错如下 [ERROR] Failed to execute goal org.apache.maven.plugins:maven-resources-plugin:3.2.0:resources (default-resources)
错误1:服务调用时报错 服务消费者模块assess通过openFeign调用服务提供者模块hires 如下为服务提供者模块hires的控制层接口 @RestController @RequestMapping(&quot;/hires&quot;) public class FeignControl
错误1:运行项目后报如下错误 解决方案 报错2:Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.8.1:compile (default-compile) on project sb 解决方案:在pom.
参考 错误原因 过滤器或拦截器在生效时,redisTemplate还没有注入 解决方案:在注入容器时就生效 @Component //项目运行时就注入Spring容器 public class RedisBean { @Resource private RedisTemplate&lt;String
使用vite构建项目报错 C:\Users\ychen\work&gt;npm init @vitejs/app @vitejs/create-app is deprecated, use npm init vite instead C:\Users\ychen\AppData\Local\npm-
参考1 参考2 解决方案 # 点击安装源 协议选择 http:// 路径填写 mirrors.aliyun.com/centos/8.3.2011/BaseOS/x86_64/os URL类型 软件库URL 其他路径 # 版本 7 mirrors.aliyun.com/centos/7/os/x86
报错1 [root@slave1 data_mocker]# kafka-console-consumer.sh --bootstrap-server slave1:9092 --topic topic_db [2023-12-19 18:31:12,770] WARN [Consumer clie
错误1 # 重写数据 hive (edu)&gt; insert overwrite table dwd_trade_cart_add_inc &gt; select data.id, &gt; data.user_id, &gt; data.course_id, &gt; date_format(
错误1 hive (edu)&gt; insert into huanhuan values(1,&#39;haoge&#39;); Query ID = root_20240110071417_fe1517ad-3607-41f4-bdcf-d00b98ac443e Total jobs = 1
报错1:执行到如下就不执行了,没有显示Successfully registered new MBean. [root@slave1 bin]# /usr/local/software/flume-1.9.0/bin/flume-ng agent -n a1 -c /usr/local/softwa
虚拟及没有启动任何服务器查看jps会显示jps,如果没有显示任何东西 [root@slave2 ~]# jps 9647 Jps 解决方案 # 进入/tmp查看 [root@slave1 dfs]# cd /tmp [root@slave1 tmp]# ll 总用量 48 drwxr-xr-x. 2
报错1 hive&gt; show databases; OK Failed with exception java.io.IOException:java.lang.RuntimeException: Error in configuring object Time taken: 0.474 se
报错1 [root@localhost ~]# vim -bash: vim: 未找到命令 安装vim yum -y install vim* # 查看是否安装成功 [root@hadoop01 hadoop]# rpm -qa |grep vim vim-X11-7.4.629-8.el7_9.x
修改hadoop配置 vi /usr/local/software/hadoop-2.9.2/etc/hadoop/yarn-site.xml # 添加如下 &lt;configuration&gt; &lt;property&gt; &lt;name&gt;yarn.nodemanager.res