python - 如何使用 R 数据框中的数据从 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 的 Pgen:7.253421763151433e-10
完成 pgen 计算:0.05 秒。
我想在我的数据框中添加一列并用 python 结果填充它的代码行现在是
df <- cbind(df,NewColumn=(system('olga-compute_pgen --humanTRB') df[,2], wait=FALSE))
但这显然根本不起作用。
感谢您的帮助,在此先感谢。
编辑:
在一些帮助之后,我已经完成了一些工作,我会在这里发布进度,因为代码更容易阅读:
system2 似乎是一个好的开始,因为我可以给出一个带有参数的命令,然后将其输出到数据框中以进一步编辑:
我现在还有两个问题:
此行不能使用先前数据帧的值作为命令的附加输入,而是使用字符串
olga <- system2('olga-compute_pgen' , args="--humanTRB ", input=x, wait=TRUE, stdout=TRUE)
然后应将输出(一旦我得到输入工作)附加到新列中的原始数据框
感谢您的帮助!
编辑2:解决方案
我已经将它与“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)
解决方案
为之前评论中迟到的回复和严厉的语气道歉。我试图帮助你学习调试你的问题,你现在已经成功了。system
返回可执行文件的退出状态。system
您可以从-function的文档中阅读此内容( https://stat.ethz.ch/R-manual/R-devel/library/base/html/system.html)。所有程序都返回一个退出状态(通常为 0 表示成功终止),这与它输出到屏幕的内容完全不同。
但是,我建议您看一下该功能system2
,它应该更加坚固和灵活。看看stdout
参数的使用,这将是解决您的问题的关键。
推荐阅读
- r - ggplot2呈现地图的问题
- apache-spark - 如何确保 spark 结构化流处理 kafka 中的所有数据
- javascript - 具有存储功能的克隆对象
- android - 将 id 移动到样式文件时如何使用数据绑定?
- python - 如何使用 Python SQL“UPDATE”语句更新需要从下拉菜单中选择的 MS Access MySQL 表字段?
- security - 访问令牌有多安全?
- sql-server - 如果记录存在,则在插入存储过程中调用更新存储过程
- python - 用先前计算的值替换操作数据集中的值
- dm-script - 如何在程序流程继续之前强制更新 UI?
- java - 关联实体管理器已关闭!休眠环境