我可以创建一个没有 for 循环的逻辑地图函数版本吗?

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 循环的情况下执行此操作吗?

李哲源*_*李哲源 5

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)