2015-11-05 73 views
-2

试图做到以下几点。用统一的(0,1)分布生成30行500个随机数。生成500行随机数,30行,均匀分布

但它只有整数,当我需要小数位数字。

+3

'矩阵(runif(60 * 300),ncol = 60)',当然还有'rexp'来实现您的实际目标。 – Roland

回答

3

您的runif命令不正确。不要:

df<-data.frame(replicate(60,runif(300,0,1))) 

正如蒂姆和罗兰指出,这是最好(快)使用方法:

df<-matrix(runif(60*300),ncol=60) 

对于runif,第一个参数是观测的数量,然后分钟,然后最大值,用逗号分隔。

df[1:5,1:5] 
     X1   X2  X3  X4  X5 
1 0.4375043 0.76986901 0.1154772 0.8861121 0.0275067 
2 0.4024352 0.19291795 0.7496475 0.5159706 0.8768299 
3 0.3164539 0.02212373 0.2091863 0.2792025 0.5175030 
4 0.2496215 0.51070780 0.8462652 0.2604232 0.9109863 
5 0.8450932 0.68503812 0.2391174 0.0220619 0.4943907 

至于你的指数分布,如果我是正确的,如果U是0和1,则-ln(U)之间的均匀分布/λ是指数分布的λ参数。 LN函数是R.

log

用下面的代码:

require(fitdistrplus) 
set.seed(1) 
df<-runif(100000,0,1) 
df<-(-log(df)) 
png('fit.png') 
descdist(df) 
dev.off() 

你得到这个情节:数据似乎遵循指数分布(如预期)

enter image description here

+0

谢谢!你会知道如何应用反演吗? – john

+0

你的意思是像'-log(df)/ lamda' ='-log(df)',你想'lambda = 1'吗? – etienne

+0

'复制'是无用的,并放慢速度!尝试'rbenchmark :: benchmark(runif(100 * 100),replicate(100,runif(100)))'''replicate'解决方案慢两倍。 – Tim