无法将值分配给空矩阵中的第 7 列和第 7 行
Unable to assign values to 7th column and row in an empty matrix
我使用 R 编写了一个双循环来为一个空的二维矩阵赋值,但结果是第 7 列和第 7 行始终留空,没有出现错误消息。
data2<-matrix(,nrow = 10,ncol = 10)
for(i in seq(0.01,0.1,0.01)){
for(j in seq(0.01,0.1,0.01)){
data2[i*100,j*100]<-i+j
}}
当我打印 data2 时:
data2
[,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
[1,] 0.02 0.03 0.04 0.05 0.06 0.08 NA 0.09 0.10 0.11
[2,] 0.03 0.04 0.05 0.06 0.07 0.09 NA 0.10 0.11 0.12
[3,] 0.04 0.05 0.06 0.07 0.08 0.10 NA 0.11 0.12 0.13
[4,] 0.05 0.06 0.07 0.08 0.09 0.11 NA 0.12 0.13 0.14
[5,] 0.06 0.07 0.08 0.09 0.10 0.12 NA 0.13 0.14 0.15
[6,] 0.08 0.09 0.10 0.11 0.12 0.14 NA 0.15 0.16 0.17
[7,] NA NA NA NA NA NA NA NA NA NA
[8,] 0.09 0.10 0.11 0.12 0.13 0.15 NA 0.16 0.17 0.18
[9,] 0.10 0.11 0.12 0.13 0.14 0.16 NA 0.17 0.18 0.19
[10,] 0.11 0.12 0.13 0.14 0.15 0.17 NA 0.18 0.19 0.20
当我进入调试模式,当i=0.01,j=0.07时,奇怪的事情发生了:
Browse[2]> i
[1] 0.01
Browse[2]> j
[1] 0.07
Browse[2]> data2[i*100,j*100]
[1] 0.07
Browse[2]> data2[1,7]
[1] NA
Browse[2]> i*100
[1] 1
Browse[2]> j*100
[1] 7
我真的很困惑为什么 data2[i100,j100] 无法到达第 7 列(也是行),它返回了 data2[ 的值1,6]。有人可以帮忙吗?我很感激。谢谢!
这是因为序列是一个浮点数,它涉及到精度,即它可能不完全等于数字 7。
identical(0.07 * 100, 7)
#[1] FALSE
(0.07 *100) - 7
#[1] 8.881784e-16
一个选项是round
。索引应该是 integer
并且可以用 round
来完成
for(i in seq(0.01,0.1,0.01)){
for(j in seq(0.01,0.1,0.01)){
data2[round(i*100), round(j*100)] <- i + j
}}
-输出
data2
# [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
# [1,] 0.02 0.03 0.04 0.05 0.06 0.07 0.08 0.09 0.10 0.11
# [2,] 0.03 0.04 0.05 0.06 0.07 0.08 0.09 0.10 0.11 0.12
# [3,] 0.04 0.05 0.06 0.07 0.08 0.09 0.10 0.11 0.12 0.13
# [4,] 0.05 0.06 0.07 0.08 0.09 0.10 0.11 0.12 0.13 0.14
# [5,] 0.06 0.07 0.08 0.09 0.10 0.11 0.12 0.13 0.14 0.15
# [6,] 0.07 0.08 0.09 0.10 0.11 0.12 0.13 0.14 0.15 0.16
# [7,] 0.08 0.09 0.10 0.11 0.12 0.13 0.14 0.15 0.16 0.17
# [8,] 0.09 0.10 0.11 0.12 0.13 0.14 0.15 0.16 0.17 0.18
# [9,] 0.10 0.11 0.12 0.13 0.14 0.15 0.16 0.17 0.18 0.19
#[10,] 0.11 0.12 0.13 0.14 0.15 0.16 0.17 0.18 0.19 0.20
这可以在没有嵌套 for
循环和创建空 matrix
的情况下完成
outer(seq(0.01, 0.1, 0.01), seq(0.01, 0.1, 0.01), `+`)
我使用 R 编写了一个双循环来为一个空的二维矩阵赋值,但结果是第 7 列和第 7 行始终留空,没有出现错误消息。
data2<-matrix(,nrow = 10,ncol = 10)
for(i in seq(0.01,0.1,0.01)){
for(j in seq(0.01,0.1,0.01)){
data2[i*100,j*100]<-i+j
}}
当我打印 data2 时:
data2
[,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
[1,] 0.02 0.03 0.04 0.05 0.06 0.08 NA 0.09 0.10 0.11
[2,] 0.03 0.04 0.05 0.06 0.07 0.09 NA 0.10 0.11 0.12
[3,] 0.04 0.05 0.06 0.07 0.08 0.10 NA 0.11 0.12 0.13
[4,] 0.05 0.06 0.07 0.08 0.09 0.11 NA 0.12 0.13 0.14
[5,] 0.06 0.07 0.08 0.09 0.10 0.12 NA 0.13 0.14 0.15
[6,] 0.08 0.09 0.10 0.11 0.12 0.14 NA 0.15 0.16 0.17
[7,] NA NA NA NA NA NA NA NA NA NA
[8,] 0.09 0.10 0.11 0.12 0.13 0.15 NA 0.16 0.17 0.18
[9,] 0.10 0.11 0.12 0.13 0.14 0.16 NA 0.17 0.18 0.19
[10,] 0.11 0.12 0.13 0.14 0.15 0.17 NA 0.18 0.19 0.20
当我进入调试模式,当i=0.01,j=0.07时,奇怪的事情发生了:
Browse[2]> i
[1] 0.01
Browse[2]> j
[1] 0.07
Browse[2]> data2[i*100,j*100]
[1] 0.07
Browse[2]> data2[1,7]
[1] NA
Browse[2]> i*100
[1] 1
Browse[2]> j*100
[1] 7
我真的很困惑为什么 data2[i100,j100] 无法到达第 7 列(也是行),它返回了 data2[ 的值1,6]。有人可以帮忙吗?我很感激。谢谢!
这是因为序列是一个浮点数,它涉及到精度,即它可能不完全等于数字 7。
identical(0.07 * 100, 7)
#[1] FALSE
(0.07 *100) - 7
#[1] 8.881784e-16
一个选项是round
。索引应该是 integer
并且可以用 round
for(i in seq(0.01,0.1,0.01)){
for(j in seq(0.01,0.1,0.01)){
data2[round(i*100), round(j*100)] <- i + j
}}
-输出
data2
# [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
# [1,] 0.02 0.03 0.04 0.05 0.06 0.07 0.08 0.09 0.10 0.11
# [2,] 0.03 0.04 0.05 0.06 0.07 0.08 0.09 0.10 0.11 0.12
# [3,] 0.04 0.05 0.06 0.07 0.08 0.09 0.10 0.11 0.12 0.13
# [4,] 0.05 0.06 0.07 0.08 0.09 0.10 0.11 0.12 0.13 0.14
# [5,] 0.06 0.07 0.08 0.09 0.10 0.11 0.12 0.13 0.14 0.15
# [6,] 0.07 0.08 0.09 0.10 0.11 0.12 0.13 0.14 0.15 0.16
# [7,] 0.08 0.09 0.10 0.11 0.12 0.13 0.14 0.15 0.16 0.17
# [8,] 0.09 0.10 0.11 0.12 0.13 0.14 0.15 0.16 0.17 0.18
# [9,] 0.10 0.11 0.12 0.13 0.14 0.15 0.16 0.17 0.18 0.19
#[10,] 0.11 0.12 0.13 0.14 0.15 0.16 0.17 0.18 0.19 0.20
这可以在没有嵌套 for
循环和创建空 matrix
的情况下完成
outer(seq(0.01, 0.1, 0.01), seq(0.01, 0.1, 0.01), `+`)