[R] runif with condition

jim holtman jholtman at gmail.com
Mon Jan 9 16:48:45 CET 2012


try this:

> x <- matrix(runif(100), ncol = 4)
> # now scale each row to add up to 100
> x.new <- t(apply(x, 1, function(.row) .row * 100 / sum(.row)))
>
>
> x.new
           [,1]       [,2]      [,3]       [,4]
 [1,] 25.868978 31.4867075 34.547444  8.0968705
 [2,] 35.803781 28.3485728 27.177462  8.6701847
 [3,] 25.643189 30.3149241  7.483549 36.5583374
 [4,] 38.446712  0.5365802 20.995852 40.0208556
 [5,] 47.536877  8.2794082 38.856246  5.3274690
 [6,] 10.823394 26.9903105 38.412020 23.7742755
 [7,] 39.918853  8.6918958  4.832078 46.5571727
 [8,] 41.247319 15.2750550 14.455257 29.0223693
 [9,]  9.884125 26.4028579 32.209590 31.5034270
[10,] 35.204957 43.8716354 13.924313  6.9990947
[11,] 34.924286 26.5681074 26.326393 12.1812132
[12,] 18.912973 24.9559474 20.356519 35.7745604
[13,]  8.153906 33.5810684 29.775884 28.4891416
[14,] 27.413875 21.9299141 25.259566 25.3966449
[15,] 11.269190 28.9627559 29.075971 30.6920828
[16,] 18.811165 34.8912360 28.570353 17.7272457
[17,] 39.415980  0.5446147 28.924644 31.1147609
[18,] 24.307223 26.2213879 20.574576 28.8968129
[19,] 46.665131 27.2148990  6.254606 19.8653638
[20,]  8.840080 45.5712404 33.149987 12.4386918
[21,] 12.096195  8.5512196 49.564027 29.7885583
[22,] 32.808282 33.2820102 33.730519  0.1791886
[23,]  5.171651 46.1836607  6.718998 41.9256910
[24,]  9.395720  3.6877559 39.528280 47.3882438
[25,]  2.061780 14.1513358 43.848042 39.9388425
>

On Mon, Jan 9, 2012 at 10:36 AM, Duncan Murdoch
<murdoch.duncan at gmail.com> wrote:
> On 09/01/2012 10:27 AM, David Winsemius wrote:
>>
>> On Jan 9, 2012, at 10:06 AM, arunkumar1111 wrote:
>>
>> >  Hi
>> >  I want to generate 4 random number which sum up to 100 always
>>
>> "Random" plus condition == "non-random"
>>
>> Perhaps you want 3 "random" numbers conjoined to the difference of
>> their sum and 100? Or perhaps you want 4 "random" numbers multiplied
>> by 100/sum(.)
>>
>> (In either case you will not be getting "4 random numbers".)
>
>
> There's quite a lot of ambiguity in the word "random".  For example, you
> seem to be assuming a "random number"  has to come from a uniform
> distribution, but I would say any distribution except the trivial point mass
> on one point is "random".
>
> So an answer to the original query in my usage is the 4-tuple (a,b,c,d):
>
> a <- 0
> b <- 0
> c <- runif(1)
> d <- 100-c
>
> but this is probably not what was wanted.
>
> Duncan Murdoch
>
>
> ______________________________________________
> R-help at r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-help
> PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
> and provide commented, minimal, self-contained, reproducible code.



-- 
Jim Holtman
Data Munger Guru

What is the problem that you are trying to solve?
Tell me what you want to do, not how you want to do it.



More information about the R-help mailing list