lme 在 r 中的用户定义函数中

lme within a user defined function in r

我需要在我的代码中多次使用混合模型 lme 函数。但我不知道如何在函数中使用它。如果以其他方式使用,lme 函数工作得很好,但在函数内使用时,它会抛出错误:

myfunc<- function(cc, x, y, z)
{

    model <- lme(fixed = x ~1 , random = ~ 1|y/z,
    data=cc,
    method="REML")
}

关于调用此函数: myfunc (dbcon2, birthweight, sire, dam)

我收到错误:

Error in model.frame.default(formula = ~x + y + z, data = list(animal = c("29601/9C1", : invalid type (list) for variable 'x'

我想,有一个我不知道的不同的使用程序。任何帮助将不胜感激。

提前致谢

不确定您是否正在寻找这个,您可以尝试使用它,正如@akrun 正确指出的那样,您可以使用 paste,但是我使用的是 paste0(它是 paste 的一种特殊情况),paste concatenates两个字符串:

这里的想法是将变量名与公式连接起来,但是由于 paste 会将其转换为字符串,因此您不能将其作为公式来构建模型,因此您需要将该字符串转换为公式使用环绕 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"

要在模型内部工作,您总是需要一个公式对象,也请尝试了解 paste 中的 collapsesep 选项,它们非常方便。

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