将连续函数应用于数据帧并将每个函数的结果输出到 table

Applying consecutive functions to a dataframe and outputting results of each into a table

我有一个大型数据框,其格式类似于以下内容(运行 ~200 种化合物)。

+-----------+----------+------------+
| Treatment | Compound | Proportion |
+-----------+----------+------------+
| A         | wax      | 0.095      |
| A         | alcohol  | 0.077      |
| A         | ketone   | 0.066      |
| B         | wax      | 0.067      |
| B         | alcohol  | 0.071      |
| B         | ketone   | 0.073      |
| C         | wax      | 0.051      |
| C         | alcohol  | 0.019      |
| C         | ketone   | 0.07       |
| D         | wax      | 0.033      |
| D         | alcohol  | 0.082      |
| D         | ketone   | 0.019      |
+-----------+----------+------------+

我有 运行 线性模型方差分析

lm(Proportion ~ Treatment) 

使用 data.table 方法对每个化合物生成了一个化合物列表,这些化合物的处理是将我的数据子集化为 "t.df".

的重要因素

我现在想使用 TukeyHSD 来确定对于这些化合物中的每一种,哪些处理彼此之间存在显着差异。我意识到 TukeyHSD 需要一个 "aov" 输出,我需要将其包含在我的代码中。我想我想要的是一种 "tapply" 方法 运行 通过我的化合物列表,应用模型,进行方差分析,然后进行 Tukeys 测试并将格式保存在矩阵列表中。

我一直在尝试尝试以下类似的方法,但没有成功:

mytest <- function(x) { 
  model<-lm(Proportion ~ Treatment, data=t.df)
  aovmodel<-aov(model)
  tuks<-TukeyHSD(aovmodel) 
  } 
tapply((t.df[unique(t.df$Compound)]),mytest)

这个returns错误:

"Error in `[.data.frame`(t.df, unique(t.df$Compound)) : 
  undefined columns selected"

我认为这可能是我在这段代码中遇到的最少的问题。

是否有任何方法可以为每个测试的化合物提取返回的 Tukey "p adj" 值?我很想避免长期这样做,因为我的列表中有大量化合物,并且预计 运行 在未来的几个数据集上使用不同的化合物名称进行类似的分析。

要获取您指定的每种化合物的 Tukey HSD,请尝试以下操作:

lapply(unique(t.df$Compound),
       function(x, df)
           TukeyHSD(aov(glm(Proportion ~ Treatment,
                            data = df,
                            subset = Compound == x)))[[1]],
       df = t.df)

对于每个独特的化合物,这会在方差分析上调用 TukeyHSD(),以获得适合与化合物对应的数据子集的一般线性模型。它 returns 一个列表,其中每个元素对应一个化合物。