我试图在R中运行以下算法:
在我的情况下,我将我的F(x)分段,以便它由:
给出cdf:
[1] 0.0000000000 0.0001524158 0.0025910684 0.0196616369 0.0879439110
0.2586495961 0.5317786923 0.8049077884 0.9609815577 1.0000000000
所以例如F(x(1))= cdf [2]
然后我生成一个随机制服的载体:
u<-c(runif(10000,0,1))
但我无法将该向量中的每个元素分配到'cdf'中的特定范围。我已经尝试了一个带有许多if语句的for循环,但这很乏味且容易出错。
我还使用while语句尝试了以下内容:
x<-u
for(i in (1:length(u))){
for(j in (1:length(cdf)))
while(x[i]<cdf[j]){x[i]==which(cdf[j]>=x[i])}
}
有什么建议吗?
答案 0 :(得分:2)
我认为你想使用cut()
,如:
cutPoints <- c(0.0000000000,# could set to -1. See comment below.
0.0001524158,
0.0025910684,
0.0196616369,
0.0879439110,
0.2586495961,
0.5317786923,
0.8049077884,
0.9609815577,
1.0000000000)
u <- runif(1000)
cut(u,
cutPoints,
labels = seq.int(length(cutPoints)-1))
请注意,(可选)参数labels
的长度比切割点b / c小一些,标签标记切割点之间的空间。有关详细信息,请参阅?cut
。