>>807
ご助言に従って改造してみました。

sim3 <- function(p){
n=length(p)
sep=cumsum(p)
y=NULL
count=0
while(length(y) < n){
z=sum(runif(1) < sep)
if(!any(z==y)) y=append(y,z)
count=count+1
}
return(count)
}


> system.time(mean(replicate(1e5, sim1(p))))
user system elapsed
86.67 0.11 87.70

> system.time(mean(replicate(1e5, sim3(p))))
user system elapsed
38.81 0.04 39.36

倍速以上になりました。