首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >R- lmer函数for loop

R- lmer函数for loop
EN

Stack Overflow用户
提问于 2020-08-25 18:16:29
回答 1查看 112关注 0票数 0

我对此真的很陌生。如果能帮上忙我会很感激!我导入的dataframe是一个包含所有结果的大表,我真的希望使用相同的lmer函数遍历每一列。

代码语言:javascript
复制
for (i in d[c(6:45)]){
  para = colnames(d[c(6:45)])[i] #para is parameter
  d.lmer <- lmer(get(para) ~ Group*Sex*CS.NCS + (1|Dam), data = d) 
  
  d.anova <- anova(d.lmer)
  
  library(emmeans)
  d.compare <- emmeans(d.lmer, ~ Sex*Group*CS.NCS) # Sex, Group, and CS.NCS are columns too.
  
  d.contrast <- contrast(d.compare, "consec", simple = "each", combine = TRUE, adjust = "mvt")
  
  d.pairs <- pairs(d.compare)

  }

然而,我不断地得到

代码语言:javascript
复制
Error in get(para) : object 'NA' not found

para确实只是一个强大的NA,我不知道它是从哪里来的!

理想情况下,我希望它在for循环中使用此函数写入excel电子表格,但我也不知道如何让file=使用d.lmer函数作为其名称。但这是下一个要处理的问题。

代码语言:javascript
复制
write.xlsx(d.compare, file = "X.xlsx",
           sheetName = "Compare", append = FALSE)
write.xlsx(d.contrast, file = "X.xlsx", 
           sheetName="Contrast", append=TRUE)
write.xlsx(d.pairs, file = "X.xlsx", 
           sheetName="Pairs", append=TRUE)
write.xlsx(d.anova, file = "X.xlsx", 
           sheetName="anova", append=TRUE)

抱歉,如果这是一个愚蠢的问题--我对R的理解很大程度上来自于Google。

谢谢!

编辑:我应该加一句,这对这个很有效:

代码语言:javascript
复制
d.lmer <- lmer(Blood ~ Group*Sex*CS.NCS + (1|Dam), data = d) #Blood is an example parameter/ column header
      
d.anova <- anova(d.lmer)
      
library(emmeans)
d.compare <- emmeans(d.lmer, ~ Sex*Group*CS.NCS) # Sex, Group, and CS.NCS are columns too.
      
d.contrast <- contrast(d.compare, "consec", simple = "each", combine = TRUE, adjust = "mvt")
      
d.pairs <- pairs(d.compare)

我只是不想手动输入每个列的标题。

EN

回答 1

Stack Overflow用户

发布于 2020-08-25 19:09:52

在没有样本数据的情况下,很难确认这个答案是否有用。然而,您的问题似乎与指定循环的方式有关。目前,您的循环正在数据帧上循环。

代码语言:javascript
复制
x <- d[c(6:45)]
class(x)

但是您似乎希望将每一列(索引6到45)添加到回归公式中。

要将para设置为单个列名,您可以将代码的开头调整为如下所示,其中para可以包含在公式中:

代码语言:javascript
复制
# load libraries
library(lme4)
library(emmeans)

# specify that d.pairs is a list
d.pairs <- list()

  for (i in colnames(d[c(6:45)])){ # here you loop over the column names

    para = i #para is parameter # here para is set to the ith column
    
    f <- as.formula(paste(para, paste("Group*Sex*CS.NCS + (1|Dam)", collapse=" * "), sep=" ~ ")) # here you make a formula

    d.lmer <- lmer(f, data = d) # here you use the formula

    d.anova <- anova(d.lmer)
      
    d.compare <- emmeans(d.lmer, ~ Sex*Group*CS.NCS) # Sex, Group, and CS.NCS are columns too.
      
    d.contrast <- contrast(d.compare, "consec", simple = "each", combine = TRUE, adjust = "mvt")
      
    d.pairs[[i]] <- pairs(d.compare) # assign pairs output to ith of d.pairs
  }
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63576702

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档