R 函数 - 将 LMER 分配给动态变量名称

R Function - assign LMER to dynamic variable name

为了创建一个更紧凑的脚本,我正在尝试创建我的第一个函数。

一般函数为:

    f.mean <- function(var, fig, datafile){
      require(lme4)
      change <- as.symbol(paste("change", var, sep=""))
      base <- as.symbol(paste("baseline", var, sep = ""))
      x <- substitute(lmer(change ~ base + (1|ID),  data=datafile))
      out<-eval(x)
      name <- paste(fig,".", var, sep="")
      as.symbol(name) <- out
      }
}

这个函数的目的是输入varfigdatafile并输出一个名为fig.var的新变量包含out(eval LMER)。

显然很难'change'<-左边的变量名。

到目前为止我们已经尝试过的:

 - assign(name, out) 
 - as.symbol(name) <<- out
 - makeActive Binding("y",function() x, .GlobalEnv)
 - several rename options to rename out to the specified var name

谁能帮我把 out 值赋给这个 'run' 特定的变量名?也欢迎所有其他建议。

正如@Roland 评论的那样,在 R(或任何)编程中,应避免间接环境操纵器,例如 assignattachlist2env<<- 和其他难以调试和中断涉及显式定义的对象和方法的常规编程流程。

此外,避免让您的全局环境充满可能需要环境挖掘的成百上千个类似结构的对象,例如 lsmgeteapply。简单地说,使用 一个 大容器,如命名元素列表,这样更易​​于管理,代码也更易于维护。

具体来说,直接分配对象并传递字符串文字(varfig)或对象(datafile)作为函数参数并具有函数值return .对于许多输入,使用 lapplyMapmapply 的包装器)构建列表以保留所需的对象。考虑下面的调整,它从字符串文字构建公式并传递到您的模型,最后返回结果。

f.mean <- function(var, fig, datafile){
  require(lme4)
  myformula <- as.formula(paste0("change", var, " ~ baseline", var, " + (1|ID)"))

  x <- lmer(myformula, data=datafile)
  return(x)
}

var_list <- # ... list/vector of var character literals
fig_list <- # ... list/vector of fig character literals

# BUILD AND NAME LIST OF LMER OUTPUTS  
lmer_list <- setNames(Map(f.mean, var_list, fig_list, MorArgs=df),
                      paste0(fig_list, ".", var_list))

# IDENTIFY NEEDED var*fig* BY ELEMENT NAME OF LARGER CONTAINER
lmer_list$fig1.var1
lmer_list$fig2.var2
lmer_list$fig3.var3