Ham*_*med 1 for-loop r vectorization
我有一个 R 函数来使用 for 循环计算逻辑图,如下所示。但是有没有办法改变它(例如向量化它)以便它不使用循环?
logistic_map <- function(x, # starting condition
r, # rate parameter
N) { # number of iterations
results <- numeric(length = N + 1)
results[1] <- x
for (i in seq_len(N)) {
results[i + 1] <- r * results[i] * (1 - results[i])
}
data.frame(i = c(0, seq_len(N)),
x = results)
}
Run Code Online (Sandbox Code Playgroud)
我已经研究了apply()函数族和 中的函数purrr,但我正在努力确定这是否可能。我很想得出这样的结论:这是不可能的,因为每一步都完全依赖于前一步,但完全有可能有一个我无法找到的优雅解决方案。
我可以在不使用 for 循环的情况下执行此操作吗?
library(Rcpp)
cppFunction('NumericVector cpp_loop (NumericVector x, double r) {
int n = x.size(), i = 0; n--;
for (; i < n; i++) x[i + 1] = r * x[i] * (1 - x[i]);
return x;
}')
logistic_map <- function(x, # starting condition
r, # rate parameter
N) { # number of iterations
results <- numeric(length = N + 1)
results[1] <- x
cpp_loop(results, r)
data.frame(i = c(0, seq_len(N)),
x = results)
}
logistic_map(2, 0.2, 100)
Run Code Online (Sandbox Code Playgroud)