【问题标题】:Creating a function in R to subset and run AUDPC analysis在 R 中创建函数以进行子集化并运行 AUDPC 分析
【发布时间】:2018-09-05 16:16:04
【问题描述】:

我正在尝试对一些数据进行 AUDPC 分析。需要将数据拆分为处理和复制块以进行分析。下面我尝试编写一个函数,目的是拆分数据分析并最终将所有处理块的输出放在一个表/对象中

library("agricolae")
library("plyr")
library("dplyr")
data = read.csv("Bio2018.csv", header = TRUE, sep = ",")
data$Treatment = as.character(data$Treatment)
data$Block = as.character(data$Block)
data$Time = as.numeric(data$Time)
AUDPC.rel = function(Treatment, Block){
  data.Treatment <- subset(data, data$Treatment == Treatment & data$Block == Block)
  AUDPC = data.frame(audpc(data.Treatment$Foci, data.Treatment$Time, type = "absolute"))
}
variables = expand.grid(Treatment = c(unique(data$Treatment)), Block = c(unique(data$Block)))
Relative.AUDPC = mdply(variables,AUDPC.rel)
Relative.AUDPC

输出总是为所有治疗块提供相同的数字。如图:

治疗 - 阻止 - 评估
未经处理 - Rep.1 - 200;
翡翠 - Rep.1 - 200;
Nortica - Rep.1 - 200;
未处理 - Rep.2 - 200;
翡翠 - Rep.2 - 200;
Nortica - Rep.2 - 200;
未处理 - Rep.3 - 200;
翡翠 - Rep.3 - 200;
Nortica - Rep.3 - 200;

【问题讨论】:

    标签: r user-defined-functions


    【解决方案1】:

    考虑使用基本 R 的 by 通过一个或多个因素(例如 TreatmentBlock)对数据帧进行子集化。因为by 将返回数据帧列表(函数的输出),所以运行do.call 将所有df 元素行绑定到一个最终数据帧。

    此外,由于by 跨越多个因素以拆分所有可能的组合,因此为此类特殊的零行子集情况包装一个tryCatch,这可能会引发audpc 调用错误。

    # BUILD FUNCTION TO RECEIVE SUBSET DF
    AUDPC.rel <- function(sub) {    
      tryCatch(data.frame(Treatment = sub$Treatment[[1]],
                          Block = sub$Block[[1]],
                          Evaluation = audpc(sub$Foci, sub$Time, type = "absolute")),
               error = function(e)
                         data.frame(Treatment = sub$Treatment[[1]],
                                    Block = sub$Block[[1]],
                                    Evaluation = NA)
               )
    }
    
    # CALL BY(), PASSING SUBSETS TO DEFINED FUNCTION
    df_list <- by(data, data[c("Treatment", "Block")], AUDPC.rel)
    
    # BUILD SINGLE FINAL DF
    final_df <- do.call(rbind, df_list)
    

    【讨论】:

    • 太棒了!很高兴能提供帮助。
    猜你喜欢
    • 1970-01-01
    • 2023-03-10
    • 1970-01-01
    • 1970-01-01
    • 2020-07-05
    • 1970-01-01
    • 2016-06-20
    • 2019-09-26
    • 2020-10-07
    相关资源
    最近更新 更多