R 如何使用substitute()从nlme包中循环lme函数?
我试图在R 如何使用substitute()从nlme包中循环lme函数?,r,lapply,lme4,mixed-models,nlme,R,Lapply,Lme4,Mixed Models,Nlme,我试图在lappy循环中使用nlme包中的函数。这适用于软件包中的lmer函数,但会为lme生成错误消息。如何循环lme函数,与下面示例中的lmer函数类似 library("nlme") library("lme4") set.seed(1) dt <- data.frame(Resp1 = rnorm(100, 50, 23), Resp2 = rnorm(100, 80, 15), Pred = rnorm(100,10,2), group = factor(rep(LETTERS
lappy
循环中使用nlme
包中的函数。这适用于软件包中的lmer
函数,但会为lme
生成错误消息。如何循环lme
函数,与下面示例中的lmer
函数类似
library("nlme")
library("lme4")
set.seed(1)
dt <- data.frame(Resp1 = rnorm(100, 50, 23), Resp2 = rnorm(100, 80, 15), Pred = rnorm(100,10,2), group = factor(rep(LETTERS[1:10], each = 10)))
## Syntax:
lmer(Resp1 ~ Pred + (1 |group), data = dt)
lme(Resp1 ~ Pred, random = ~1 | group, data = dt)
## Works for lme4
lapply(c("Resp1", "Resp2"), function(k) {
lmer(substitute(j ~ Pred + (1 | group), list(j = as.name(k))), data = dt)})
## Does not work for nlme
lapply(c("Resp1", "Resp2"), function(k) {
lme(substitute(j ~ Pred, list(j = as.name(k))), random = ~1 | group, data = dt)})
# Error in UseMethod("lme") :
# no applicable method for 'lme' applied to an object of class "call"
库(“nlme”)
图书馆(“lme4”)
种子(1)
dt除了玩弄substitute
和eval
之外,您还可以执行以下操作:
lapply(c("Resp1", "Resp2"), function(r) {
f <- formula(paste(r, "Pred", sep = "~"))
m <- lme(fixed = f, random = ~ 1 | group, data = dt)
m$call$fixed <- f
m})
lappy(c(“Resp1”、“Resp2”),函数(r){
f正如@CarlWitthoft所建议的,在函数中添加eval
将解决以下问题:
lapply(c("Resp1", "Resp2"), function(k) {
lme(eval(substitute(j ~ Pred, list(j = as.name(k)))), random = ~1 | group, data = dt)})
另请参见@thothal的备选方案。尝试添加eval
来处理调用对象?@CarlWitthoft-Jep。这就成功了。谢谢!答案是lme(eval(替换(j~Pred,list(j=as.name(k))),random=~1 | group,data=dt)
Mikko,很高兴这么做了。请自行发布答案。
lapply(c("Resp1", "Resp2"), function(k) {
lme(eval(substitute(j ~ Pred, list(j = as.name(k)))), random = ~1 | group, data = dt)})