Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/83.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R:值随调用方法的不同而变化_R_Matrix - Fatal编程技术网

R:值随调用方法的不同而变化

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

有点奇怪的情况:我有代码创建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

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非常感谢您;你的回答不仅解释了错在哪里,还解释了我为什么忽略了它,你所联系的答案非常合理(…事后看来)。欢迎你。如果答案有帮助,请接受它。