lme

时间:2017-12-24 05:47:30

标签: r mixed-models

我需要在我的代码中多次使用混合模型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;

的无效类型(列表)

我认为,使用它的方法不同,我不知道。任何帮助将不胜感激。

提前致谢

1 个答案:

答案 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中了解seppaste选项,它们非常方便。

我没有您的数据,因此我使用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来了解有关粘贴的更多信息。