R子集函数,包括'['不访问数据帧或矩阵中的某些值

时间:2014-03-12 17:12:06

标签: r subset

与此处相同的问题:R subset functions, including '[' not working on middle range of large dataframe/matrix,但有人在我今天早上有机会尝试答案之前将该问题标记为重复。具体来说,我不能在我的变量中访问.937-.975,无论是单行还是for循环。使用'[':

来说明问题

在'['中遇到同样的问题,其中大部分矩阵,.937和.975之间没有得到处理:

> for3d.mat <- matrix(ncol=3,nrow=0)
> for(i in seq(.8,1,by=.001)){for(j in seq(.8,1,by=.001)){iter.mat <- matrix(ncol=3,c(i,j,length(MergedBH[MergedBH$V4.x ==i & MergedBH$V4.y ==j,]$V4.x)));for3d.mat <- rbind(for3d.mat,iter.mat)}}
> for3d.mat[for3d.mat[,1] == .975 & for3d.mat[,2] == .966,]
 [,1] [,2] [,3]

能够在大多数矩阵上使用'['或子集,但是对于原始数据帧或者无法通过子集化方法访问的for3d.mat,只有一个特定范围,例如:

> for3d.mat[for3d.mat[,1] == .976 & for3d.mat[,2] == .937,]
[1] 0.976 0.937    NA
> for3d.mat[for3d.mat[,1] == .975 & for3d.mat[,2] == .937,]
 [,1] [,2] [,3]

编辑以显示第一个答案是正确的,它是FAQ 7.31问题:

> unique(for3d.mat[,1] - 0.976, digits=16)
[1] -5.600000e-02 -5.500000e-02 -5.400000e-02 -5.300000e-02 -5.200000e-02
[6] -5.100000e-02 -5.000000e-02 -4.900000e-02 -4.800000e-02 -4.700000e-02
[11] -4.600000e-02 -4.500000e-02 -4.400000e-02 -4.300000e-02 -4.200000e-02
[16] -4.100000e-02 -4.000000e-02 -3.900000e-02 -3.800000e-02 -3.700000e-02
[21] -3.600000e-02 -3.500000e-02 -3.400000e-02 -3.300000e-02 -3.200000e-02
[26] -3.100000e-02 -3.000000e-02 -2.900000e-02 -2.800000e-02 -2.700000e-02
[31] -2.600000e-02 -2.500000e-02 -2.400000e-02 -2.300000e-02 -2.200000e-02
[36] -2.100000e-02 -2.000000e-02 -1.900000e-02 -1.800000e-02 -1.700000e-02
[41] -1.600000e-02 -1.500000e-02 -1.400000e-02 -1.300000e-02 -1.200000e-02
[46] -1.100000e-02 -1.000000e-02 -9.000000e-03 -8.000000e-03 -7.000000e-03
[51] -6.000000e-03 -5.000000e-03 -4.000000e-03 -3.000000e-03 -2.000000e-03
[56] -1.000000e-03  1.110223e-16  1.000000e-03  2.000000e-03  3.000000e-03
[61]  4.000000e-03  5.000000e-03  6.000000e-03  7.000000e-03  8.000000e-03
[66]  9.000000e-03  1.000000e-02  1.100000e-02  1.200000e-02  1.300000e-02
[71]  1.400000e-02

1.11e-16对应的值应为.976

1 个答案:

答案 0 :(得分:2)

我希望这是FAQ 7.31。

查看结果:

for3d.mat[,1] == 0.976
for3d.mat[,2] == 0.937
print(for3d.mat[,1] - 0.976, digits=16)
print(for3d.mat[,2] - 0.937, digits=16)

然后阅读常见问题解答。

我会自己运行上面的确认,但我们没有MergedBH因此无法再现您的示例。