R 根据应用于最后生成的数字的方程式生成序列递增的向量
我想生成一个向量,从1开始,到900为止,每次增加都是基于最后生成的数字加1,然后乘以1.55;然后将其四舍五入到最接近的数字 也就是说,顺序应该是:R 根据应用于最后生成的数字的方程式生成序列递增的向量,r,R,我想生成一个向量,从1开始,到900为止,每次增加都是基于最后生成的数字加1,然后乘以1.55;然后将其四舍五入到最接近的数字 也就是说,顺序应该是: First number: 1 (i.e., start at 1) Second number: 3 (i.e., (1+1)*1.55) Third number: 6 (i.e., (3+1)*1.55) 我试过: x0=1 seq(x0, 600, (+1*1.55)) 使用while循环的不太聪明的方法 使用while循
First number: 1 (i.e., start at 1)
Second number: 3 (i.e., (1+1)*1.55)
Third number: 6 (i.e., (3+1)*1.55)
我试过:
x0=1
seq(x0, 600, (+1*1.55))
使用while循环的不太聪明的方法
使用while循环的不太聪明的方法 还原溶液 下面是一个使用Reduce的解决方案 R文件 标杆管理 以下是基准数据:
Unit: microseconds
expr min lq mean median uq max neval cld
ronak(1, 10^5) 34.644 38.656 56.628269 40.844 52.878 25973.41 1e+05 c
nate(1, 10^5) 36.103 40.844 57.294825 43.032 53.243 26714.79 1e+05 c
darren(1, 10^5) 29.903 33.550 46.599951 35.374 41.209 12248.98 1e+05 b
nateCpp(1, 10^5) 2.553 4.012 6.578349 4.741 5.471 10963.14 1e+05 a
不奇怪,C++的解决方案是最快的。对于仅限R的解决方案
@DarrenTsai的递归是最快的递归,但应谨慎使用,可能会出现嵌套表达式过多等问题-在这种情况下,随着数字的快速增长,然后是
@RonakShah和我的职能。
功能
还原溶液
下面是一个使用Reduce的解决方案
R文件
标杆管理
以下是基准数据:
Unit: microseconds
expr min lq mean median uq max neval cld
ronak(1, 10^5) 34.644 38.656 56.628269 40.844 52.878 25973.41 1e+05 c
nate(1, 10^5) 36.103 40.844 57.294825 43.032 53.243 26714.79 1e+05 c
darren(1, 10^5) 29.903 33.550 46.599951 35.374 41.209 12248.98 1e+05 b
nateCpp(1, 10^5) 2.553 4.012 6.578349 4.741 5.471 10963.14 1e+05 a
不奇怪,C++的解决方案是最快的。对于仅限R的解决方案
@DarrenTsai的递归是最快的递归,但应谨慎使用,可能会出现嵌套表达式过多等问题-在这种情况下,随着数字的快速增长,然后是
@RonakShah和我的职能。
功能
递归解决方案:
FUN <- function(start, end){
n <- length(start) ; last <- start[n]
if(last >= end)
return(start[-n])
else
FUN(c(start, round((last + 1) * 1.55)), end)
}
FUN(1, 900)
# [1] 1 3 6 11 19 31 50 79 124 194 302 470 730
递归解决方案:
FUN <- function(start, end){
n <- length(start) ; last <- start[n]
if(last >= end)
return(start[-n])
else
FUN(c(start, round((last + 1) * 1.55)), end)
}
FUN(1, 900)
# [1] 1 3 6 11 19 31 50 79 124 194 302 470 730
所以第三个数字是6.2,你做了6,当它变得像之后。5,你需要地板或天花板?所以第三个数字是6.2,你做了6,当它变得像之后。5,你需要地板或天花板?
ronak <- function(x0,stop) {
new_num = 1
num = 1
while(new_num < stop) {
new_num = round((new_num + 1) * 1.55)
num = c(num, new_num)
}
head(num,-1)
}
nate <- function(x0, bound) {
r <- 1.55
estimate <- round(log(bound, r))
vec <- Reduce(f = function(y,x) round((1+y)*r), x = 1:estimate, init = x0, accumulate = TRUE)
vec <- vec[vec <= bound]
vec
}
darren <- function(start, end){
n <- length(start) ; last <- start[n]
if(last >= end)
return(start[-n])
else
darren(c(start, round((last + 1) * 1.55)), end)
}
FUN <- function(start, end){
n <- length(start) ; last <- start[n]
if(last >= end)
return(start[-n])
else
FUN(c(start, round((last + 1) * 1.55)), end)
}
FUN(1, 900)
# [1] 1 3 6 11 19 31 50 79 124 194 302 470 730