Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/335.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在RPy中使用smooth.spline的lambda参数,而不使用Python将其解释为lambda_Python_R_Rpy2_Spline_Smoothing - Fatal编程技术网

如何在RPy中使用smooth.spline的lambda参数,而不使用Python将其解释为lambda

如何在RPy中使用smooth.spline的lambda参数,而不使用Python将其解释为lambda,python,r,rpy2,spline,smoothing,Python,R,Rpy2,Spline,Smoothing,我想使用Python中R中的自然三次平滑样条曲线smooth.spline(就像许多其他人想要的som一样(,,…) 因此,我使用了中所述的rpy2,但我想直接设置lambda,而不是spar: import rpy2.robjects as robjects r_y = robjects.FloatVector(y_train) r_x = robjects.FloatVector(x_train) r_smooth_spline = robjects.r['smooth.spline']

我想使用Python中R中的自然三次平滑样条曲线
smooth.spline
(就像许多其他人想要的som一样(,,…) 因此,我使用了中所述的
rpy2
,但我想直接设置
lambda
,而不是
spar

import rpy2.robjects as robjects
r_y = robjects.FloatVector(y_train)
r_x = robjects.FloatVector(x_train)

r_smooth_spline = robjects.r['smooth.spline'] #extract R function# run smoothing function
spline1 = r_smooth_spline(x=r_x, y=r_y, lambda=42)
#alternative: spline1 = r_smooth_spline(x=r_x, y=r_y, spar=0.7) would work fine, but I would like to control lambda dirctly
ySpline=np.array(robjects.r['predict'](spline1,robjects.FloatVector(x_smooth)).rx2('y'))
plt.plot(x_smooth,ySpline)
当我这样做时,
spline1=r\u smooth\u spline(x=r\ux,y=r\uy,lambda=42)
行不起作用,因为Python已经对
lambda
进行了预定义的解释(您可以从
lambda
的蓝色代码高亮显示中看到这一点):( 我希望
lambda
被解释为平滑惩罚参数lambda


如果我用
spar
替换
lambda
,我会得到一个自然三次样条曲线,但我想直接控制
lambda

可以在函数调用中使用Python的
**
来指定R个命名参数,这些参数的名称在Python中语法上无效


有关更多详细信息,请参阅文档:

调用
smooth.spline
时,也许可以使用
rpy2
的方法

import rpy2.robjects as robjects
r_y = robjects.FloatVector(y_train)
r_x = robjects.FloatVector(x_train)

r_smooth_spline = robjects.r['smooth.spline']
args = (('x',r_x), ('y',r_y), ('lambda',42)) # pattern (('argname', value),...)

# import R's "GlobalEnv" to evaluate the function
from rpy2.robjects import globalenv

spline1 = r_smooth_spline.rcall(args, globalenv)

这个小技巧可以解决您遇到的特定问题,允许您在字符串中编写“lambda”

kwargs={“x”:r_x,“y”:r_y,“lambda”:42}
spline1=r_平滑_样条(**kwargs)
在一般情况下,可以使用元组和dict轻松地传递参数容器

#正常
f=函数(“foo”,“bar”,my_kwarg=“my_value”)
#使用参数容器进行相同的调用
args=(“foo”、“bar”)
kwargs={“我的kwarg”:“我的价值”}
f=函数(*args,**kwargs)

code示例?当我使用
**
时,线条
spline1=r\u平滑样条线(x=r\ux,y=r\uy,lambda=42)
看起来如何?
spline1=r\u平滑样条线(x=r\ux,y=r\uy,**=42)
不起作用…检查文档。那里有代码示例。添加了一个很好的代码示例。我认为这与您的文档相对应。在我之后输入的两个答案都在文档中;-)这是指向过时文档的链接。你会想要的