R中rep()函数的意外行为

4

我正在尝试使用rep()函数在R中创建一个向量。

p <- .9
n <- 100
rep(8,n*(1-p)^2) # expect 8
什么导致了意外行为?

2
@Frank - 是的,as.integer(n*(1-p)^2) 返回 0 - 同样地,as.integer(0.99999) 也返回 0 - thelatemail
4
基本上这是常见问题FAQ 7.31,例如http://stackoverflow.com/questions/26296576/r-generates-fewer-random-numbers-than-specified-with-rnorm-rexp-rpois-and-runi/26297615#26297615。 - Ben Bolker
1
@Dave identical(n*(1-p)^2,1) 是错误的,就像 n*(1-p)^2==1 一样。R 不会精确存储这样的数字。 - Frank
2个回答

阿里云服务器只需要99元/年,新老用户同享,点击查看详情
0
这是因为问题的评论中有解释。一个解决方法是使用:
rep(8, round(n*(1-p)^2))

0

压缩注释。 rep 的第二个参数应该是一个整数。从帮助页面:?as.integer,我们知道实数被截断为零。所以

n*(1-p)^2

传递给

as.integer(n*(1-p)^2)

这等于0


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,