使用r中的for循环生成单位小于1的序列
generate a sequence with unit smaller than 1 using for loop in r
我正在尝试生成一个单位小于 1 的序列,但我无法获得该序列的正确数字。可重现的代码如下所示:
> 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
stock 的预期输出长度应为 73,与序列的长度相同。我现在的数字 3.450000 3.967500 4.562625 ... 13.957174 是正确的但不完整,数字 13.957174 之后应该还有 62 个值。任何的想法?非常感谢。
也许,您正在寻找这样的东西:
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
我正在尝试生成一个单位小于 1 的序列,但我无法获得该序列的正确数字。可重现的代码如下所示:
> 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
stock 的预期输出长度应为 73,与序列的长度相同。我现在的数字 3.450000 3.967500 4.562625 ... 13.957174 是正确的但不完整,数字 13.957174 之后应该还有 62 个值。任何的想法?非常感谢。
也许,您正在寻找这样的东西:
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