【问题标题】:How to run Chisq test for multiple rows FASTER in R?如何在 R 中更快地对多行运行 Chisq 测试?
【发布时间】:2019-03-05 09:00:21
【问题描述】:

我已经设法在 R 中使用循环进行 chisq-test,但是对于大数据来说它非常慢,我想知道你是否可以帮助我用 dplyr 之类的东西更快地完成它?我已经尝试过使用 dplyr,但我最终总是收到一个错误,我不确定原因。

这是我的数据的一个简短示例:

    df
           1        2        3        4        5
row_1  2260.810 2136.360 3213.750 3574.750 2383.520
row_2   328.050  496.608  184.862  383.408  151.450
row_3   974.544  812.508 1422.010 1307.510 1442.970
row_4  2526.900  826.197 1486.000 2846.630 1486.000
row_5  2300.130 2499.390 1698.760 1690.640 2338.640
row_6   280.980  752.516  277.292  146.398  317.990
row_7   874.159  794.792 1033.330 2383.420  748.868
row_8   437.560  379.278  263.665  674.671  557.739
row_9  1357.350 1641.520 1397.130 1443.840 1092.010
row_10 1749.280 1752.250 3377.870 1534.470 2026.970


cs 
 1 1 1 2 1 2 2 1 2 3

我想做的是在 df 和 cs 的每一行之间运行 chisq-test。然后给我统计数据和 p.values 以及行名。

这是我的循环代码:

value = matrix(nrow=ncol(df),ncol=3)


for (i in 1:ncol(df)) {
  tst <- chisq.test(df[i,], cs)
  value[i,1] <- tst$p.value
  value[i,2] <- tst$statistic
  value[i,3] <- rownames(df)[i]}

感谢您的帮助。

【问题讨论】:

  • 索引不应该是i in 1:nrow(df)吗?此外,我发现tbl 对象没有做任何事情,而且您可以使用value[[3]] &lt;- rownames(df) 一次(在循环外)分配所有行名。 dplyr 函数通常不会使事情变得更快。它的目标是让事情更容易理解。

标签: r performance loops dplyr chi-squared


【解决方案1】:

我猜您确实想逐列执行此操作。了解Biobase::exprs(PANCAN_w)) 的结构会有很大帮助。更好的是使用 Biobase 包中的示例而不是找不到的数据集。

这是我可能使用过的代码的实现。注意:如果您期望数字和字符值的混合,您不希望使用矩阵来存储结果。您将强制将所有数字转换为字符:

value = data.frame(p_val =NA,  stat =NA, exprs = rownames(df) )

for (i in 1:col(df)) {
  # tbl <- table((df[i,]), cs) ### No use seen for this
  # I changed the indexing in the next line to compare columsn to the standard `cs`.

  tst <- chisq.test(df[ ,i], cs)  #chisq.test not vectorized, need some sort of loop

  value[i, 1:2] <- tst[ c('p.value', 'statistic')]  # one assignment per row
     }

显然,您需要将df(不是一个好名字,因为还有一个df 函数)的每个实例都更改为Biobase::exprs(PANCAN_w)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-11
    • 2012-09-02
    • 1970-01-01
    • 2019-07-03
    • 1970-01-01
    相关资源
    最近更新 更多