R 循环的单向方差分析:如何迭代一个数据帧的多个列?

R 循环的单向方差分析:如何迭代一个数据帧的多个列?,r,dataframe,for-loop,anova,R,Dataframe,For Loop,Anova,这是我第一次来这里,所以放松点!老实说,以我花在故障排除上的时间,我本可以手工完成每一项工作,但我决心让这项工作顺利进行 我想运行71个不同的单因素方差分析,比较71个大脑感兴趣区域(ROI)和实验组(group)的体积。分为三组:对照组(1)、弹性组(2)和易感组(3) 我的tibble数据框如下所示: > head(df) # A tibble: 6 x 74 ID group whole_brain amygdala arbor_vitae auditory_cortex

这是我第一次来这里,所以放松点!老实说,以我花在故障排除上的时间,我本可以手工完成每一项工作,但我决心让这项工作顺利进行

我想运行71个不同的单因素方差分析,比较71个大脑感兴趣区域(ROI)和实验组(group)的体积。分为三组:对照组(1)、弹性组(2)和易感组(3)

我的tibble数据框如下所示:

> head(df)
# A tibble: 6 x 74
  ID    group whole_brain amygdala arbor_vitae auditory_cortex bed_nuclei
  <chr> <dbl>       <dbl>    <dbl>       <dbl>           <dbl>      <dbl>
1 01mc      1        495.     16.5        5.72            5.29       1.30
2 02mc      1        494.     16.8        5.95            5.29       1.30
3 6mc       1        491.     16.9        5.75            5.31       1.17
4 11mc      1        485.     16.5        5.70            5.04       1.31
5 14mc      1        491.     17.1        6.03            5.06       1.21
6 18mc      1        492.     16.5        6.07            5.12       1.23
当我将
aov()
中的第一个对象(
df[,I]
)交换为一个ROI的名称(例如
amygdala
)时,输出给出每个迭代ROI列名,下面是所选的方差分析(
amygdala~组,data=df
)。这告诉我for循环是有效的,但是我如何克服错误信息,并让它系统地将组与每个ROI进行比较呢

任何帮助都将是惊人的,即使指出这是一个完全旧的方法,并且有更容易使用的方法


非常感谢:)

看起来不是for循环本身不起作用,而是传递给aov的依赖变量之一是一个列表,而不是数字

要确定哪些列是列表,您可以:
sappy(df,class)
并查找列表和修复的变量

df$badvariable < - unlist(df$badvariable)

在方差分析的摘要中,是否要保留所有元素?你们需要从所有ANOVA中得到什么样的输出?底线是,我想知道所有ROI与组的比较的效应大小(R平方)、p值和置信区间(不是非常必要,但会很好)。从那些重要的测试中,我可以进行事后测试。
Error in model.frame.default(formula = df[, i] ~ group, data = df, drop.unused.levels = TRUE) : 
  invalid type (list) for variable 'df[, i]'
df$badvariable < - unlist(df$badvariable)
for(i in 4:ncol(df))
{

column <- names(df[i])
#tidy will summarise and return neat format
avz <- broom::tidy(aov(df[,i] ~ group, data = df))

# Add this condition if you only want aov with P < 0.05 printed
if(avz$p.value[1] < 0.05) {

  print(column)
  print(avz)
 }
}