UsageError:无法识别的参数:在%R lin中

2024-09-30 16:21:29 发布

您现在位置:Python中文网/ 问答频道 /正文

自从我发现了rpy2和在ipython笔记本中使用%R的可能性后,我的编码就变得简单多了。但我可能撞到了墙。在

我需要从稳定的分布中创造价值。我使用的是R的StableList包

我需要运行命令:

      Fx = pstable(seq(-2,4,0.1), alpha =alfa_x, beta = -1, gamma = scale_x, delta = delta_x, pm = 1, lower.tail = TRUE, log.p = FALSE, subdivisions = 1000)

当我将其中一个单元格定义为R单元格并在那里运行命令时:

^{pr2}$

一切都很好。在

但我需要一个python脚本。到目前为止,我已经使用了许多R包,而且数据的推/拉工作得很好,所以它在python脚本中使用了一行行R代码(带有%R rmagic)。在

但是,对于这个,如果我在python脚本中调用相同的包和函数,请按以下方式:

      python code...
      %Rpush alfa_x
      %Rpush scale_x
      %Rpush delta_x
      %R Fx = pstable(seq(-2,4,0.1), alpha =alfa_x, beta = -1, gamma = scale_x, delta = delta_x, pm = 1, lower.tail = TRUE, log.p = FALSE, subdivisions = 1000)

我得到使用错误:

     UsageError: unrecognized arguments:.....

我基本上得到了这个旧的[thread][1]中报告的一些错误

有什么建议吗?在

(我确实尝试在python代码中使用%%R,但它不会改变任何东西)

[1]https://bitbucket.org/rpy2/rpy2/issue/253/r-select-flights-year-day


Tags: 命令alpha脚本lowerseqbetadeltafx
3条回答

我找到了解决这个问题的办法。但我想知道是否有一个适当的解决办法。在

我创建了一个R单元,一个“变通”功能:

%%R
library(stabledist)
workaround_pstable <- function(x,alfa_x,scale_x,delta_x)
{F = pstable(x, alpha =alfa_x, beta = -1, gamma = scale_x, delta = delta_x, pm = 1, lower.tail = TRUE, log.p = FALSE, subdivisions = 1000)
 return(F)}

然后在ipython单元中的python代码中,我调用了解决方法函数

^{pr2}$

成功了。在

通过调用由rpy2公开的R函数,可以获得更好的代码清晰度:

from rpy2 import robjects
# get whatever is called "pstable", just like when writing
# "pstable" in the R console
pstable = robjects.globalenv.get('pstable')
# same for seq... but since I know that it is coming from base, I
# get it from there
seq = robjects.baseenv['seq']
Fx = pstable(seq(-2,4,0.1),
             alpha = alfa_x,
             beta = -1,
             gamma = scale_x,
             delta = delta_x,
             pm = 1,
             lower_tail = True,
             log_p = False,
             subdivisions = 1000)

一种选择是使用经典方法:

import rpy2.robjects as robjects
FX= robjects.r('''
         pstable(seq(-2,4,0.1), 
                     alpha =alfa_x, 
                     beta = -1, 
                     gamma = scale_x, 
                     delta = delta_x, 
                     pm = 1, lower.tail = TRUE, 
                     log.p = FALSE, subdivisions = 1000)
           ''')

相关问题 更多 >