gpt4 book ai didi

R:值因调用方法而异

转载 作者:行者123 更新时间:2023-12-01 13:48:15 24 4
gpt4 key购买 nike

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

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com