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



我想使用python程序,我可以在命令行中,从r脚本中调用,然后在数据框中为每个行调用此程序,添加结果到数据框架,然后将数据框导出为.tsv数据。

我的示例是:我有一个数据框架,其中第2列中有一个字符串(amino_acid),我想在第2列中的每个字符串上称呼程序" olga-compute_pgen",并从" olga-compute_pgen"到数据框中的新列。

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

olga-compute_pgen -humantrb(这是字符串)

输出的示例是:

olga-compute_pgen --humanTRB CASSLGRDGGHEQYF

导致此输出的结果:

氨基酸序列Casslgrdggheqyf:7.253421763151433e-10

以:0.05秒完成PGEN计算。

代码行,我想在其中添加一个列,并用python结果填充它

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

这显然根本不起作用。

我感谢任何帮助,谢谢。

编辑:

经过一些帮助,我得到了一些工作,我会在这里发布进度,因为代码易于阅读:

System2似乎是一个不错的开始,因为我可以给出一个参数的命令,然后将其输出到数据范围中以进一步编辑:

我现在还有两个问题:

  1. 此行不能将先前数据框的值用作命令的附加输入,而是使用字符串

    olga&lt; - system2('olga-compute_pgen',args =" - humantrb",input = x,wait = true,stdout = true = true)

  2. 输出(一旦我获得了工作的输入),应将其附加到新列中的原始数据框架

感谢您的帮助!

edit2:解决方案

我已经将其与" System2"one_answers" 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)

在上一条评论中对迟到的答复和刺耳的语气表示歉意。我试图帮助您学会调试您的问题,而您现在成功。system返回可执行文件的退出状态。您可以从 system -function(https://stat.ethz.ch/r-manual/r-manual/r-devel/library/library/base/base/html/system.html)的文档中读取此信息。所有程序均返回退出状态(通常为成功的终止为0),这与 outputs 的内容完全不同。

我会建议您查看函数system2,这应该更坚固和灵活。看看stdout参数的使用,这将是解决您的问题的关键。

最新更新