如何在RPy中使用smooth.spline的lambda参数,而不使用Python将其解释为lambda
我想使用Python中R中的自然三次平滑样条曲线如何在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']
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)
不起作用…检查文档。那里有代码示例。添加了一个很好的代码示例。我认为这与您的文档相对应。在我之后输入的两个答案都在文档中;-)这是指向过时文档的链接。你会想要的