【问题标题】:Can't apply t-test for data frame in R无法对 R 中的数据框应用 t 检验
【发布时间】:2021-05-21 05:58:39
【问题描述】:

我倾向于对数据框中的每一行(即微阵列数据)应用 t 检验,并通过以下代码比较 2:13 和 14:67 列:

t_test = apply(Df, 1, function(x) { t.test(x[2:13], x[14:67])$p.value } )

但是,我收到了这个错误:

if (stderr

我通过以下代码检查了有关这些问题的一些建议(似乎很多人也遇到了这个问题)是否有任何值丢失/非数字:

TRUE %in% is.character(Data_rma[2:13])  TRUE %in% is.character(Data_rma[14:67])
TRUE %in% is.na(Data_rma[2:13])  TRUE %in% is.na(Data_rma[14:67])

什么都没有,所有的值都是数字。我不知道我的问题是什么问题。

非常感谢!

我已将我的数据框上传到云端硬盘,您可以尝试一下。 https://drive.google.com/file/d/1FE81HYaSTo7rEPG-qb-mdknPcpvebsWT/view?usp=sharing

My Data Frame likes this

【问题讨论】:

    标签: r dataframe apply t-test


    【解决方案1】:

    这是一个错误,因为当您按行 apply 时,您将获得具有 3 列 "character" 类的向量,因此将所有数字强制转换为字符。然后,在字符变量上运行 t 检验会失败。

    正确的方法是首先确定哪些是数字列,然后将测试应用于原始数据的子集。

    num_cols <- which(sapply(Data_rma, is.numeric))
    i1 <- which(num_cols %in% 2:13)
    i2 <- which(num_cols %in% 14:67)
    
    t_test <- apply(Data_rma[num_cols], 1, function(x) {
      tryCatch(t.test(x[i1], x[i2])$p.value,
               error = function(e) e
      )
    })
    
    ok <- !sapply(t_test, inherits, "error")
    all(ok)
    #[1] TRUE
    

    数据读取代码

    google_id <- "1FE81HYaSTo7rEPG-qb-mdknPcpvebsWT"
    google_file <- sprintf("https://docs.google.com/uc?id=%s&export=download", google_id)
    Data_rma <- read.csv(google_file)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-05-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-08-23
      • 2021-05-27
      相关资源
      最近更新 更多