Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/78.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
在函数内部运行时,lmer返回错误_R_Function_Lme4 - Fatal编程技术网

在函数内部运行时,lmer返回错误

在函数内部运行时,lmer返回错误,r,function,lme4,R,Function,Lme4,我试图在所选变量上建立一个适合混合模型的函数 如果在函数中运行此命令: lme4::lmer(VAR ~ cVAR + (1|ID), data=df) 我得到一个错误: Error in model.frame.default(data = df, drop.unused.levels = TRUE, formula = VAR ~ : variable lengths differ (found for 'ID') 我已经用几种方法测试了我的代码,但我就是找不出哪里出了问题。我

我试图在所选变量上建立一个适合混合模型的函数

如果在函数中运行此命令:

lme4::lmer(VAR ~ cVAR + (1|ID), data=df) 
我得到一个错误:

Error in model.frame.default(data = df, drop.unused.levels = TRUE, formula = VAR ~  : 
  variable lengths differ (found for 'ID')
我已经用几种方法测试了我的代码,但我就是找不出哪里出了问题。我可以从函数内部进行绘图,没有问题。如果我试着只打印函数中使用的数据帧,它看起来就像我想要的那样。 此外,如果我在函数外部运行lmer命令(将VAR和cVAR替换为X和cX),那么该命令运行时不会出现问题

因此,我认为错误是由于在函数内运行lmer()引起的。有类似的问题,但与我的错误消息不同

有没有办法在函数内运行lmer而不出错

可复制示例:

  set.seed(1)

org <- data.frame(
  X = rep(1:10+rnorm(10,mean=1,sd=0.5),2),
  cX = rep(1:10+rnorm(10,mean=1,sd=0.5),2),
  Y = rep(1:10+rnorm(10,mean=1,sd=0.5), 2),
  cY = rep(1:10-rnorm(10,mean=1,sd=0.5),2),
  Frame = rep(1:5, 4),
  JN = rep(1:2, each=5),
  ID = rep(1:2, each=10))

FUNC <- function(VAR) {
  VAR <- deparse(substitute(VAR))
  cVAR <- paste0("c", VAR)
  df <- dplyr::select(org, ID, JN, Frame, VAR, cVAR) # Keeping only a subset of the data
  df <- df %>% tidyr::drop_na() #Keeping only complete cases

  stopifnot(all(c(VAR, cVAR) %in% names(df)))

  MixedModel <- lme4::lmer(VAR ~ cVAR + (1|ID), data=df)
  b <- plot(MixedModel)
}

#It works fine outside the function:
MixedModel_no_FUNC <- lme4::lmer(X ~ cX + (1|ID), data=org)
plot(MixedModel_no_FUNC)

#But not inside the function
FUNC(X)

数据帧中的对象名称与函数中的环境中的对象名称存在冲突。以下是您的数据:

org <- data.frame(
    X = rep(1:10+rnorm(10,mean=1,sd=0.5),2),
    cX = rep(1:10+rnorm(10,mean=1,sd=0.5),2),
    Y = rep(1:10+rnorm(10,mean=1,sd=0.5), 2),
    cY = rep(1:10-rnorm(10,mean=1,sd=0.5),2),
    Frame = rep(1:5, 4),
    JN = rep(1:2, each=5),
    ID = rep(1:2, each=10))

org谢谢你-这是可行的,我自己永远也不会明白:-)我不知道为什么用:
ggplot(df,aes_string(x=VAR,y=cVAR))+geom_point()绘图不会产生同样类型的错误。你能帮我理解吗?我不是这个问题的专家,但之前已经处理过好几次了,所以当从全局环境和函数环境调用对象时,我尽量避免在函数中使用对象的相同名称。开始阅读的一个好资源是:
org <- data.frame(
    X = rep(1:10+rnorm(10,mean=1,sd=0.5),2),
    cX = rep(1:10+rnorm(10,mean=1,sd=0.5),2),
    Y = rep(1:10+rnorm(10,mean=1,sd=0.5), 2),
    cY = rep(1:10-rnorm(10,mean=1,sd=0.5),2),
    Frame = rep(1:5, 4),
    JN = rep(1:2, each=5),
    ID = rep(1:2, each=10))
library(lme4)
FUNC <- function(VAR = "VAR", df) {
    cVAR <- paste0("c", VAR)
    stopifnot(all(c(VAR, cVAR) %in% names(df)))
    df <- df[,c("ID", "JN", "Frame", VAR, cVAR)]
    names(df) <- c(c("ID", "JN", "Frame", "Y", "X"))
    df <- df[complete.cases(df),]
    MixedModel <- lme4::lmer(Y ~ X + (1|ID), data=df)
    plot(MixedModel)
}

FUNC(VAR = "X", df = org)