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
中的 collapse
和 sep
选项,它们非常方便。
我没有你的数据,因此我使用 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
来阅读有关粘贴的更多信息。
我需要在我的代码中多次使用混合模型 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
中的 collapse
和 sep
选项,它们非常方便。
我没有你的数据,因此我使用 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
来阅读有关粘贴的更多信息。