我有下面发布的R代码,我想从python代码中传递参数n
并显示结果。也就是说,如果我通过了4,那么16必须打印在屏幕上。请让我知道如何将arguments从python 传递到R-脚本
R-代码:
Square <- function(n) {
return(n^2)
}
Python代码:
command ='Rscript'
path2Func1Script ='/var/www/aw/Rcodes/func-1.R'
args = [3]
cmd = [command, path2Func1Script]
output = None
try:
x = subprocess.call(cmd + args, shell=True)
print("x: ", x)
except subprocess.CalledProcessError as e:
output = e.output
print("output: ", output)
解决方案:
我看到你是手动完成这项工作的。我建议你使用一个很棒的python库,名为rpy2
。Rpy2提供了许多功能,可以使用python本身的R库和函数,而无需使用子进程在python
的命令行参数中手动调用r
脚本,这不仅使代码更容易编写,而且更高效。
需要注意的最重要的一点是,要将python整数列表解析为r函数,您需要将其转换为rIntVector
,就像robjects.vectors.IntVector()
一样。另一件事是,如果您使用的是windows ,则需要将R_HOME
环境变量设置为r安装的路径
首先使用conda安装rpy2
(pip
仅适用于带有此软件包的linux
(:
conda install -c conda-forge rpy2
以下是代码python代码:
import rpy2.robjects as robjects
# Defining the R script and loading the instance in Python
r = robjects.r
r['source']('func-1.R')
# Loading the function we have defined in R.
square_func = robjects.globalenv['Square']
# defining the args
args = robjects.vectors.IntVector([3])
#Invoking the R function and getting the result
result_r = square_func(args)
#printing it.
print('x: ' , result_r)
输出:
x: [1] 9