user11806155
user11806155

Reputation: 133

generate a sequence with unit smaller than 1 using for loop in r

I am trying to generate a sequence with a unit smaller than 1, but I could not get the right number for the sequence. A reproducible code looks like below:

> stock=3 # initial value
> inflow=0.4
> outflow=0.25
> unit=1/8
> stock=stock+(inflow-outflow)*stock
> for (i in seq(1,10,by=unit)) stock[i+1]=stock[i]+(inflow-outflow)*stock[i]
> stock
 [1]  3.450000  3.967500  4.562625  5.247019  6.034072  6.939182  7.980060  9.177069 10.553629
[10] 12.136673 13.957174
> length(stock)
[1] 11
> seq(1,10,by=unit)
 [1]  1.000  1.125  1.250  1.375  1.500  1.625  1.750  1.875  2.000  2.125  2.250  2.375  2.500  2.625
[15]  2.750  2.875  3.000  3.125  3.250  3.375  3.500  3.625  3.750  3.875  4.000  4.125  4.250  4.375
[29]  4.500  4.625  4.750  4.875  5.000  5.125  5.250  5.375  5.500  5.625  5.750  5.875  6.000  6.125
[43]  6.250  6.375  6.500  6.625  6.750  6.875  7.000  7.125  7.250  7.375  7.500  7.625  7.750  7.875
[57]  8.000  8.125  8.250  8.375  8.500  8.625  8.750  8.875  9.000  9.125  9.250  9.375  9.500  9.625
[71]  9.750  9.875 10.000
> length(seq(1,10,by=unit))
[1] 73

The expected output of stock should have a length of 73, same as the length of the sequence. The numbers now I have 3.450000 3.967500 4.562625 ... 13.957174 is correct but not complete, there should be 62 more values after the number 13.957174. Any idea? Thank you very much.

Upvotes: 0

Views: 141

Answers (1)

Ronak Shah
Ronak Shah

Reputation: 389325

Perhaps, you are looking for something like this :

stock=3 
inflow=0.4
outflow=0.25
unit=1/8
len <- seq(1,10,by=unit)
for (i in seq_along(len[-1])) stock[i+1]=stock[i]+(inflow-outflow)*stock[i]
stock

# [1]     3.00     3.45     3.97     4.56     5.25     6.03     6.94
# [8]     7.98     9.18    10.55    12.14    13.96    16.05    18.46
#[15]    21.23    24.41    28.07    32.28    37.13    42.70    49.10
#[22]    56.46    64.93    74.67    85.88    98.76   113.57   130.61
#[29]   150.20   172.73   198.64   228.43   262.70   302.10   347.41
#[36]   399.53   459.46   528.37   607.63   698.77   803.59   924.13
#[43]  1062.75  1222.16  1405.49  1616.31  1858.75  2137.57  2458.20
#[50]  2826.93  3250.97  3738.62  4299.41  4944.32  5685.97  6538.87
#[57]  7519.70  8647.65  9944.80 11436.52 13152.00 15124.80 17393.52
#[64] 20002.54 23002.92 26453.36 30421.37 34984.57 40232.26 46267.10
#[71] 53207.16 61188.23 70366.47

Upvotes: 1

Related Questions