我正在处理一个更复杂的功能。我想在我的函数内部传递一个变量来做几件事。无法工作的部分是尝试访问嵌入了变量名称的对象。
一个简单的例子如下:
## Annette Dobson (1990) "An Introduction to Generalized Linear Models".
## Page 9: Plant Weight Data.
ctl <- c(4.17,5.58,5.18,6.11,4.50,4.61,5.17,4.53,5.33,5.14)
trt <- c(4.81,4.17,4.41,3.59,5.87,3.83,6.03,4.89,4.32,4.69)
group <- gl(2,10,20, labels=c("Ctl","Trt"))
weight <- c(ctl, trt)
D9.fit.lm <- lm(weight ~ group)
my.coeff <- function(mname)
{
b <- round(mname.fit.lm$coef[1],2)
m <- round(mname.fit.lm$coef[2],4)
r2 <- round(summary(mname.fit.lm)$r.squared,2)
cbind(b, m, r2)
}
所以,如果我尝试这样的代码:
my.coeff("D9")
然后我收到以下错误:
Error in my.coeff("D9") : object 'mname.fit.lm' not found
我真的是我的功能,它应该看起来像这个输出
cbind(round(D9.fit.lm$coef[1],2),round(D9.fit.lm$coef[2],4),round(summary(D9.fit.lm)$r.squared,2))
[,1] [,2] [,3]
(Intercept) 5.03 -0.371 0.07
谢谢!
答案 0 :(得分:3)
只需在function
mname.fit.lm <- get(paste(mname, ".fit.lm", sep = ""))
答案 1 :(得分:1)
您将字符串传递给您的函数。看起来你应该传递一个lm对象。
这样的事情:
my.coeff <- function(mname)
{
b <- round(mname$coef[1],2)
m <- round(mname$coef[2],4)
r2 <- round(summary(mname)$r.squared,2)
cbind(b, m, r2)
}
my.coeff(D9.fit.lm)
答案 2 :(得分:1)
正如Ramnath所说,有时人们用get
来解决这个问题。但我同意JD的观点,在这种情况下,您应该选择更好的方式来存储lm
个对象。另一种选择是将它们存储在命名列表中:
fit.lm <- list()
fit.lm[["D9"]] <- lm(weight ~ group)
my.coeff <- function(mname)
{
b <- round(fit.lm[[mname]]$coef[1],2)
m <- round(fit.lm[[mname]]$coef[2],4)
r2 <- round(summary(fit.lm[[mname]])$r.squared,2)
cbind(b, m, r2)
}