我想创建一个函数,该函数根据其输入生成一个随机数并将其应用于 bool(boolean) vector 。此功能将用于生成约500M元素的测试数据。

f <- function(x, p) ifelse(x, runif(1)^p, runif(1)^(1/p))
f(c(T,T,T,F,F,F), 2)

我得到的不是我想要的。
[1] 0.0054 0.0054 0.0054 0.8278 0.8278 0.8278

我希望输入 vector 的每个元素都有一个新的随机数,而不是重复两个随机数。为什么我得到此结果,以及如何获得期望的结果呢?
c(runif(3)^2, runif(3)^(1/2))

这会为每个元素产生一个新的随机数
0.0774 0.7071 0.2184 0.8719 0.9990 0.8819

最佳答案

您需要制作两个不同的随机数 vector ,它们的长度与x -vector相同。

 f <- function(x, p) ifelse(x, runif(6)^p, runif(6)^(1/p))
 f(c(T,T,T,F,F,F), 2)
 [1] 0.3040201 0.5543376 0.7291466 0.5205014 0.3563542 0.8697398

或更笼统地说:
f <- function(x, p) ifelse(x, runif( length(x) )^p, runif( length(x) )^(1/p))
ifelse-函数实际上并没有执行循环。第二个和第三个参数分别求值一次。

关于r - 在应用于向量的函数中将ifelse与随机变量生成一起使用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31685847/

10-11 18:41