如何用向量v与函数f生成目标矩阵?R语言purrr实现求助
在R中用purrr生成迭代函数应用的矩阵
要实现从初始向量v出发,依次应用函数f生成包含v、f(v)直到f^k(v)的矩阵,你可以用purrr包的iterate或accumulate函数完成,完全不需要依赖函数的闭式解:
方法1:使用purrr::iterate
iterate函数会重复应用指定函数,并返回每一步的结果(包括初始值),正好匹配需求:
library(purrr) # 定义参数 v <- 1:100 f <- function(x) 2 * x k <- 3 # 生成到f^3(v),最终矩阵共4列 # 生成迭代结果列表 iterated_results <- iterate(n = k + 1, .f = f, .x = v) # 转换为矩阵(每列对应一次迭代结果) result_matrix <- do.call(cbind, iterated_results) # 验证前几行 head(result_matrix)
方法2:使用purrr::accumulate
如果更习惯用accumulate,可以通过一个长度为k的序列控制迭代次数,同样保留所有中间结果:
library(purrr) v <- 1:100 f <- function(x) 2 * x k <- 3 # 从初始向量v开始,迭代应用f共k次 iterated_results <- accumulate(1:k, ~ f(.x), .init = v) # 合并为矩阵 result_matrix <- do.call(cbind, iterated_results)
两种方法都会生成目标矩阵,每一列依次对应v、f(v)、f(f(v))……直到f^k(v),完全通过函数迭代实现,没有利用f(x)=2x的闭式特性。
内容的提问来源于stack exchange,提问作者Mohan
相关产品推荐
相关产品推荐

