如何从R脚本中调用Python脚本,使用R数据帧中的数据,并将结果添加到新列中

2024-09-30 20:17:55 发布

您现在位置:Python中文网/ 问答频道 /正文

我想使用一个python程序,我可以在命令行中从R脚本中调用它,然后为数据帧中的每一行调用这个程序,将结果添加到数据帧中,然后将数据帧导出为.tsv数据。你知道吗

我的例子是这样的:我有一个数据帧,其中第2列有一个字符串(氨基酸),我想对第2列中的每个字符串调用程序“olga-compute\u pgen”,并将“olga-compute\u pgen”得到的数值添加到数据帧中的一个新列中。你知道吗

我在终端中的命令(我使用MacOS)是

olga-compute\u pgen--humanTRB(这里是字符串)

输出示例如下:

olga-compute_pgen --humanTRB CASSLGRDGGHEQYF

这导致了这个输出:

CASSLGRDGGHEQYF氨基酸序列的Pgen:7.25342176351433e-10

在0.05秒内完成pgen计算。你知道吗

我想在dataframe中添加一列并用python结果填充它的代码行现在就在这里

df <- cbind(df,NewColumn=(system('olga-compute_pgen --humanTRB') df[,2], wait=FALSE))

但这显然根本不起作用。你知道吗

谢谢你的帮助,提前谢谢。你知道吗

编辑:

在得到一些帮助之后,我已经让它发挥了一些作用,我将在这里发布进展,因为代码更容易阅读:

system2似乎是一个很好的开始,因为我可以给出一个带有参数的命令,然后将其输出到dataframe中进行进一步编辑:

我现在还有两个问题:

  1. 此行不能使用上一个数据帧的值作为命令的附加输入,而是使用字符串

    olga<;-system2('olga-compute\u pgen',args=“--humanTRB”,input=x,wait=TRUE,stdout=TRUE)

  2. 然后,输出(一旦输入生效)应附加到新列中的原始数据帧中

已经谢谢你的帮助了!你知道吗

Edit2:解决方案

我将“system2”和“foreach”结合起来使用,下面是我最后所做的:

#dataframe is df
#first define the function to use (in this case olga from python)
olgafunction <- function(y) {
    olga <- system2('olga-compute_pgen', args=c("--humanTRB ",
        as.character(y[,2])), wait=TRUE, stdout=TRUE)
    y <- cbind(y, pgen=olga)
    }
#now use this function for every row of the dataframe
dfoutput <- foreach(dfrow=iter(df, by='row'), .combine=rbind) %do%
    olgafunction(dfrow)

Tags: 数据字符串命令程序truedataframedffunction
1条回答
网友
1楼 · 发布于 2024-09-30 20:17:55

对于上一次评论中迟来的回复和严厉的语气表示歉意。我试图帮助你学会调试你的问题,你现在成功了。system返回可执行文件的退出状态。您可以从system-函数(https://stat.ethz.ch/R-manual/R-devel/library/base/html/system.html)的文档中阅读。所有程序都返回一个退出状态(通常为0表示成功终止),这与它输出到屏幕的内容有很大不同。你知道吗

不过,我建议您看看函数system2,它应该更坚固、更灵活一些。看看stdout参数的用法,这将是解决问题的关键。你知道吗

相关问题 更多 >