Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 如何使用substitute()从nlme包中循环lme函数?_R_Lapply_Lme4_Mixed Models_Nlme - Fatal编程技术网

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)})