作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
有点奇怪的情况:我有创建 2x2 矩阵并用特定值填充它们的代码,然后生成长度等于第一个矩阵中的单元格值的其他矩阵。当我查看矩阵中的值时,我得到了一个结果——当我去生成列表时,它们充当了一个完全不同的数字。
例如相关代码,运行于R 3.2.2
N <-100
pa <-.3
pna <- .4
pb <-.1
pnb <-.2
table.nH <- matrix(nrow=2,ncol=2)
table.nH[1,1] <- (1-pna)*(1-pnb)*N
table.nH[2,1] <- (1-pa)*(1-pnb)*N
table.nH[1,1] #This should be 48
> [1] 48
table.nH[2,1] #This should be 56
> [1] 56
pass.list <- matrix(rep(c(0,0,0,0),table.nH[1,1]),ncol=4,byrow=TRUE)
fail.list <- matrix(rep(c(0,0,0,0),table.nH[2,1]),ncol=4,byrow=TRUE)
length(pass.list[,1]) #Number of rows *should be* 48
> [1] 48
length(fail.list[,1]) #Number of rows *should be* 56
> [1] 55
我这辈子都弄不明白为什么一个有效而另一个无效。如果我对 56 进行硬编码(即 rep(c(0,0,0,0),56)),但如果我在矩阵中引用 56,则不会。有问题的实际表没有 NA 值,这不是唯一的(出于某种原因,我在同一问题的其他版本上看到它)。但是,它也不是通用的:以这种方式生成的其他一些表完全按预期工作。
这是怎么回事,我该如何解决?
最佳答案
原因在于rep
的行为。在文档中,它说
Non-integer values of times will be truncated towards zero.
现在,如果您详细查看矩阵中的值,您会注意到其中一个值不是整数:
format(table.nH, digits = 18)
# [,1] [,2]
# [1,] "48.0000000000000000" " NA"
# [2,] "55.9999999999999929" " NA"
如果 table.nH[2, 1]
向零四舍五入,您将得到 55。
你可以通过四舍五入来解决这个问题
table.nH <- round(table.nH, 0)
format(table.nH, digits = 18)
# [,1] [,2]
# [1,] "48" "NA"
# [2,] "56" "NA"
如果您想知道为什么 table.nH[2, 1]
不是整数:这与表示 float 的方式有关。 There is a question在这个主题上有一个很好的答案。
关于R:值因调用方法而异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34075229/
我是一名优秀的程序员,十分优秀!