0

我有一个看起来像这样的数据

   Cov dis err kval  n         prob
1   10   0   0    0  0 7.574657e-01
2   10   0   0    0  1 2.104075e-01
3   10   0   0    0  2 2.922241e-02
4   10   0   0    1  3 2.705617e-03
5   10   0   0    1  4 1.878731e-04
6   10   0   0    0  5 1.043613e-05
7   10   0   0    0  6 4.830806e-07
8   10   0   0    0  7 1.916636e-08
9   10   1   0    0  8 6.653565e-10
10  10   1   0    0  9 2.053068e-11
11  10   1   0    0 10 5.701398e-13

我想要做的是对该数据执行一个子集。但是为什么这失败了?

dat.full <- read.table("http://dpaste.com/1283733/plain/",header=TRUE);
subset(dat.full,(Cov == 10    && dis==0 &&  err==0 && kval==1), select=prob);

它给出了以下缺失的行输出:

[1] prob
<0 rows> (or 0-length row.names)

执行子集的正确方法是什么?

我希望它会返回:

4 2.705617e-03
5 1.878731e-04
4

2 回答 2

3

您应该使用&而不是&&用于矢量化操作。

 subset(dat.full ,Cov == 10    & dis==0 &  err==0 & kval==1,select=prob)
          prob
4 0.0027056170
5 0.0001878731
于 2013-07-03T09:31:35.350 回答
1

您可以通过子集来解决此问题

subset(dat.full, (Cov == 10 & dis==0 & err==0 & kval==1), select=prob)

您遇到的问题是,它&&不是矢量化的,而应该只用于标量值。改为使用&(或|用于 OR)。

于 2013-07-03T09:34:09.250 回答