R如何将函数传递给函数

时间:2016-04-01 09:12:48

标签: r function plm

当我想在像plm这样的回归命令中指定我自己的强大标准错误时,如何在不运行多个函数的情况下直接执行此操作?

library("plm")
library("lmtest")
Data <- iris
Data$time <- as.numeric(rep(1951:2000,3))

这是我将在plm中运行的内容:

regression <- plm(Sepal.Length ~ Sepal.Width + Petal.Length, 
    data = Data, 
    index = c("Species", "time"), 
    model = "within", 
    effect = "twoways")

现在说我喜欢在个体(物种层面)聚集的协方差矩阵:

results <- coeftest(regression,vcov=vcovHC(regression,type="HC0",cluster="group"))

我的问题是我如何直接在plm中包含这些标准错误,而不必先运行它。这不是什么大问题,因为协方差矩阵无论如何都是在一个单独的步骤中计算出来的,但会感觉更优雅。

2 个答案:

答案 0 :(得分:2)

在plm-world中,协方差矩阵总是作为附加参数传递,例如:到regression$vcov <- vcovHC(regression, type="HC0", cluster="group")。但您可以尝试以下方法: 在plm对象中,覆盖已存在的vcov:

summary.plm

但是,如果稍后将各种函数应用于plm对象,则无法保证不会破坏其他任何内容。

您可能还想查看由summary.plm创建的res <- summary(regression, vcov = vcovHC(regression, type="HC0", cluster="group")) 对象,例如

?summary.plm

此外,您可能希望查看vcov(doc for summary.plm)如何将summary函数传递给{{1}}(上面的示例传递函数创建的矩阵)

答案 1 :(得分:1)

如果这是一个关于优雅的问题,请尝试使用dplyr,(或pipeRmagrittr)包来获取“&#39; pipe&#39;运营商。撰写functionA(functionB((x)

y <- functionB(x)
z <- functionA(y)

你可以使用一个很好的选择:

z <- x %>% functionB %>% functionA

在您的情况下,这将使:

results <- 
plm(Sepal.Length ~ Sepal.Width + Petal.Length, 
    data = Data, 
    index = c("Species", "time"), 
    model = "within", 
    effect = "twoways") %>% 
coeftest(., vcov=vcovHC(.,type="HC0",cluster="group"))

您使用.明确标记您正在输入%>%管道运营商之前的内容。