在用户定义的函数中出现“找不到对象”错误

时间:2018-01-15 12:13:38

标签: r cluster-analysis user-defined-functions

我正在尝试创建一个能够提供集群稳健标准错误的函数。 我已经安装了一个模型

gnuplot> s = sprintf("%.1g", 0.00230354); print s
0.002
gnuplot> s = sprintf("%.1g", 0.000000230354); print s
2e-07
gnuplot> s = sprintf("%.1g", 0.000000260354); print s
3e-07

并且没有将以下语句包含在我设法运行的函数中

library(readstata13)
library(multiwayvcov)
library(lmtest)
df = read.dta13("http://www.stata-press.com/data/r13/auto.dta")

fit= lm(price ~ mpg + rep78 + weight + factor(foreign) , data= df)

但是,当我尝试将它放在一个函数中时,它不再起作用了!为什么呢?

#this one works
a<-cluster.vcov(fit, ~ foreign)
coeftest(fit, a)

我得到的错误是

  

eval中的错误(predvars,data,env):找不到对象'clusterby'

1 个答案:

答案 0 :(得分:2)

因为它试图找到clusterby而不是foreign。您可以使用substituteeval来执行此操作。你可以在你的函数中做这样的事情:

clu<- function(fitmodel,clusterby ) {
  require(multiwayvcov, quietly = TRUE)
  require(lmtest, quietly = TRUE)
  a <- eval(substitute(cluster.vcov(fitmodel, ~ i),  list(i = as.name(clusterby))))
  # a<-cluster.vcov(fitmodel, ~ clusterby)
  coeftest(fitmodel, a)
}

此外,由于foreign不是对象,因此您的函数调用应如下所示:

clu(fit,"foreign")