我有一个向量x
和一个函数f
。我需要生成一个矩阵,其第一列为v
,第二列为f(v)
,依此类推,直到最后一列为f^k(v)
。在函数式语言中,我可以使用展开操作。我看过purrr
备忘单,但没有发现任何类似的东西。
如果您需要一个具体的例子,请采取v = c(1:100)
和f = function(x){return (2*x)}
——但请不要利用 f^k 在这种情况下恰好具有很好的封闭形式的事实。
我有一个向量x
和一个函数f
。我需要生成一个矩阵,其第一列为v
,第二列为f(v)
,依此类推,直到最后一列为f^k(v)
。在函数式语言中,我可以使用展开操作。我看过purrr
备忘单,但没有发现任何类似的东西。
如果您需要一个具体的例子,请采取v = c(1:100)
和f = function(x){return (2*x)}
——但请不要利用 f^k 在这种情况下恰好具有很好的封闭形式的事实。
您是否在寻找类似的东西:
你可以使用
Reduce
如下方法给出结果
预分配矩阵并填充它的速度大约快 10 倍,尽管较慢的版本仍然只需要大约 0.1 秒即可构建 1000x100 矩阵……使用
Reduce()
可获得 2 倍速度的额外因子。尝试使用字符串构造方法会遇到“评估嵌套太深”错误。(我认为,如果按行而不是按列增加数据框,则慢速方法会慢得多......)
另一种方法是增加函数公式而不是增加内存对象(参见R-Inferno第 12 页):
|>
,然后解析该字符串并对其进行评估x
:cbind
将结果向量放入矩阵中:输出:
与循环矩阵的性能比较: