R:值随调用方法的不同而变化
有点奇怪的情况:我有代码创建2x2矩阵并用特定值填充它们,然后生成长度等于第一个矩阵中单元格值的其他矩阵。当我查看矩阵中的值时,我得到一个结果——当我去生成列表时,它们作为一个完全不同的数字 例如,运行在R3.2.2上的相关代码R:值随调用方法的不同而变化,r,matrix,R,Matrix,有点奇怪的情况:我有代码创建2x2矩阵并用特定值填充它们,然后生成长度等于第一个矩阵中单元格值的其他矩阵。当我查看矩阵中的值时,我得到一个结果——当我去生成列表时,它们作为一个完全不同的数字 例如,运行在R3.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
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
N原因在于rep
的行为。在文档中,它说
时间的非整数值将被截断为零
现在,如果您详细查看矩阵中的值,您会注意到其中一个值不是整数:
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非常感谢您;你的回答不仅解释了错在哪里,还解释了我为什么忽略了它,你所联系的答案非常合理(…事后看来)。欢迎你。如果答案有帮助,请接受它。