【问题标题】:R apply script output in different formats for similar inputsR为类似的输入应用不同格式的脚本输出
【发布时间】:2015-04-28 18:12:54
【问题描述】:

我正在使用双重应用函数来获取两个表的任意两列之间的 cor.test 的 p 值列表。

hel_plist<-apply(bc, 2, function(x) { apply(otud, 2, function(y) { if (cor.test(x,y,method="spearman", exact=FALSE)$p.value<0.05){cor.test(x,y,method="spearman", exact=FALSE)$p.value}}) })

otud data.frame 是 90X11(90 行,11 列,或者说是 dim(otud) 90 11),将与不同的 data.frames 一起使用。 bc 和 hel - 都是 90X2 data.frame-s - 所以我从函数中得到 2*11=22 个 p 值

bc_plist<-apply(bc, 2, function(x) { apply(otud, 2, function(y) { if (cor.test(x,y,method="spearman", exact=FALSE)$p.value<0.05){cor.test(x,y,method="spearman", exact=FALSE)$p.value}}) })
hel_plist<-apply(hel, 2, function(x) { apply(otud, 2, function(y) { if (cor.test(x,y,method="spearman", exact=FALSE)$p.value<0.05){cor.test(x,y,method="spearman", exact=FALSE)$p.value}}) })

对于 bc,我将输出 dim=NULL 的元素列表 otunames$bcnames$ p 值(我一直从这些脚本中得到的一种格​​式并且很满意) 但是对于 hel,我将得到并输出 dim(hel) 11 2 - 一个 11X2 表,其中写有 p 值。

输出的缩短示例。

hel_plist

+--------+--------------+--------------+
|        | axis1        | axis2        |
+--------+--------------+--------------+
| Otu037 | 1.126362e-18 | 0.01158251   |
| Otu005 | 3.017458e-2  | NULL         |
| Otu068 | 0.00476002   | NULL         |
| Otu070 | 1.27646e-15  | 5.252419e-07 |
+--------+--------------+--------------+

bc_plist

$axis1
$axis1$Otu037
[1] 1.247717e-06

$axis1$Otu005
[1] 1.990313e-05

$axis1$Otu068
[1] 5.664597e-07

为什么输入格式都一样? (缩短的例子)

bc

+-------+-----------+-----------+
| group | axis1     | axis2     |
+-------+-----------+-----------+
| 1B041 | 0.125219  | 0.246319  |
| 1B060 | -0.022412 | -0.030227 |
| 1B197 | -0.088005 | -0.305351 |
| 1B222 | -0.119624 | -0.144123 |
| 1B227 | -0.148946 | -0.061741 |
+-------+-----------+-----------+

救命

+-------+---------------+---------------+
| group | axis1         | axis2         |
+-------+---------------+---------------+
| 1B041 | -0.0667782322 | -0.1660606406 |
| 1B060 | 0.0214470932  | -0.0611351008 |
| 1B197 | 0.1761876858  | 0.0927570627  |
| 1B222 | 0.0681058251  | 0.0549292399  |
| 1B227 | 0.0516864361  | 0.0774155225  |
| 1B235 | 0.1205676221  | 0.0181712761  |
+-------+---------------+---------------+

如何强制我的脚本总是像 bc 一样产生“平面”输出

【问题讨论】:

    标签: r data-structures output apply


    【解决方案1】:

    OK 不同的 output-s 是由于 bc_plist 情况下条件函数的 NULL 结果导致的。如果我要修改代码以用 NA-s 替换可能的 NULL-s,无论如何我都会得到 2d 表。 所以要保持不变:

    bc_nmds_plist<-apply(bc_nmds, 2, function(x) { apply(stoma_otud, 2, function(y) { if (cor.test(x,y,method="spearman", exact=FALSE)$p.value<0.05){cor.test(x,y,method="spearman", exact=FALSE)$p.value}else NA}) })
    

    我也得到了 bc_nmds_plist 的二维表。 所以我想这件事可以被称为解决了——因为我现在有一段代码可以在任何正确的输入上产生可预测的输出。 如果有人知道如何强制输出符合 previos bc_plist 格式,我仍然会感兴趣,因为我确实更喜欢这种形式:

    $axis1
    $axis1$Otu037
    [1] 1.247717e-06
    
    $axis1$Otu005
    [1] 1.990313e-05
    
    $axis1$Otu068
    [1] 5.664597e-07
    

    【讨论】:

      猜你喜欢
      • 2020-07-06
      • 2015-12-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多