我想使用一个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中进行进一步编辑:
我现在还有两个问题:
此行不能使用上一个数据帧的值作为命令的附加输入,而是使用字符串
olga<;-system2('olga-compute\u pgen',args=“--humanTRB”,input=x,wait=TRUE,stdout=TRUE)
然后,输出(一旦输入生效)应附加到新列中的原始数据帧中
已经谢谢你的帮助了!你知道吗
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)
对于上一次评论中迟来的回复和严厉的语气表示歉意。我试图帮助你学会调试你的问题,你现在成功了。
system
返回可执行文件的退出状态。您可以从system
-函数(https://stat.ethz.ch/R-manual/R-devel/library/base/html/system.html)的文档中阅读。所有程序都返回一个退出状态(通常为0表示成功终止),这与它输出到屏幕的内容有很大不同。你知道吗不过,我建议您看看函数
system2
,它应该更坚固、更灵活一些。看看stdout
参数的用法,这将是解决问题的关键。你知道吗相关问题 更多 >
编程相关推荐