fun = R中汇总函数的参数

时间:2017-02-12 03:19:56

标签: python r rpy2 summary

我使用R Data Analysis Examples: Ordinal Logistic Regression作为指导进行序数逻辑回归(最终使用rpy2接口在python中)。

在他们测试比例赔率假设的步骤中,他们使用以下公式创建预测估计表:

(s <- with(dat, summary(as.numeric(apply) ~ pared + public + gpa, fun=sf)))

我注意到的一件事是fun =参数的行为是不同的,如果fun是大写的。为了了解原因,我在此查看了来源:summary.R source,但只找到了FUN =

根据加州大学洛杉矶分校网站(在上面的链接中):“当R看到带有公式参数的摘要调用时,它将通过右侧的组计算公式左侧变量的描述性统计数据。公式并将结果返回到一个漂亮的表中。默认情况下,summary将计算左侧变量的平均值...但是,我们可以通过提供我们自己的函数来覆盖均值的计算,即sf到{{1}最后一个命令要求R将内容返回给对象s,这是一个表。“

我理解这是做什么的,但我不确定参数fun=在源代码方面的位置(fun =似乎是默认值,给出了公式的左侧和无视功能sf)。这个覆盖位于何处?这实际上记录了一些地方吗?如果是这样,那么,因为它显然不在帮助文档中。这是我第一次看到R源,所以我会坦然承认我一无所知。

我正在深入研究这个问题的原因是rpy2中的行为与R中的行为不一致。在R中,FUNfun =都产生输出,但在rpy2中,只有{{ 1}}产生输出; FUN =会引发FUN =

错误

因此,需要深入挖掘来源,找出为什么这不能按预期工作。

修改

成功和失败的python行分别是(我在R中创建了一个名为gms.test的包,它包含函数/ closure sf):

fun =

请注意,调试此代码不是我在此问题中的意图。我只是希望能够看到R中RRuntimeError: Error in as.character(substitute(fun)) : cannot coerce type 'closure' to vector of type 'character'覆盖的内容。

1 个答案:

答案 0 :(得分:0)

很容易获得来源。根据{{​​3}},我跑了 getAnywhere(summary.formula)并获得了相关的代码块:

if (length(fun)) {
    if (length(de <- deparse(fun)) == 2) {
        de <- as.list(fun)
        de <- as.character(de[[length(de)]])
        funlab <- if (de[1] == "apply") 
          de[length(de)]
        else de[1]
    }
    else funlab <- as.character(substitute(fun))
}

因此,如果没有使用默认的fun,它会尝试转换为字符向量,这就是为什么我不断得到错误关闭强制的原因。在R中,我可以重新创建错误,只需执行as.character(sf) ...(FUN,btw是一个红色的鲱鱼,因为任何我们不fun的参数都具有相同的行为。哦,这确实不好玩!