我需要在我的代码中多次使用混合模型lme函数。但我不知道如何在一个函数中使用它。如果另外使用,lme函数效果很好但是在函数中使用时会抛出错误:
myfunc<- function(cc, x, y, z)
{
model <- lme(fixed = x ~1 , random = ~ 1|y/z,
data=cc,
method="REML")
}
调用此函数: myfunc(dbcon2,出生体重,父亲,母亲)
我收到错误:
model.frame.default中的错误(公式= ~x + y + z,data = list(动物 = c(&#34; 29601 / 9C1&#34;,:变量&#39; x&#39;
的无效类型(列表)
我认为,使用它的方法不同,我不知道。任何帮助将不胜感激。
提前致谢
答案 0 :(得分:2)
不确定你是否正在寻找这个,你可以尝试使用它,正如@akrun正确指出的那样,你可以使用paste,我使用的是paste0(它是一个特殊的粘贴案例),粘贴连接两个字符串:
这里的想法是将变量名称与公式连接起来,但由于粘贴将其转换为字符串,因此您无法将其作为公式来构建模型,因此您需要将该字符串转换为公式使用包含在paste0语句中的as.formula
。
要理解上述内容,请尝试使用粘贴编写如下公式:
formula <-paste0("mpg~", paste0("hp","+", "am"))
print(formula)
[1] "mpg~hp+am"
class(formula)
[1] "character" ##This should ideally be a formula rather than character
formula <- as.formula(formula) ##conversion of character string to formula
class(formula)
[1] "formula"
要在模型中工作,您总是需要一个公式对象,同时也请尝试在collapse
中了解sep
和paste
选项,它们非常方便。
我没有您的数据,因此我使用mtcars
数据来表示相同的数据。
library("nlme")
myfunc<- function(cc, x, y, z)
{
model <- lme(fixed = as.formula(paste0(x," ~1")) , random = as.formula(paste0("~", "1|",y,"/",z)),
data=cc,
method="REML")
}
models <- myfunc(cc=mtcars, x="hp", y="mpg", z="am")
summary(models)
您可以在控制台中输入?paste
来了解有关粘贴的更多信息。