Eu tenho um vetor x
e uma função f
. Preciso gerar a matriz cuja primeira coluna é v
, segunda coluna é f(v)
, e assim por diante até a coluna final f^k(v)
. Em uma linguagem funcional eu poderia usar uma operação de desdobramento . Dei uma olhada no purrr
cheatsheet, mas não consigo encontrar nenhum análogo.
Se você precisar de um exemplo concreto, pegue v = c(1:100)
e f = function(x){return (2*x)}
- mas por favor não explore o fato de que f^k tem uma bela forma fechada neste caso.
Você está procurando algo como:
Você poderia usar
Reduce
como abaixoque dá resultado
Pré-alocar uma matriz e preenchê-la é cerca de 10x mais rápido, embora a versão mais lenta ainda leve apenas cerca de 0,1 segundos para construir uma matriz 1000x100... usando
Reduce()
ganha fator adicional de 2x velocidade. Tentar usar o método de construção de string gera um erro de "avaliação aninhada muito profundamente".(Acho que o método lento seria muito mais lento se você aumentasse o quadro de dados em linhas, em vez de em colunas ...)
Outra abordagem, aumentando a fórmula da função em vez do objeto de memória (ver R-Inferno p. 12):
|>
, depois analisa a string e a avalia emx
:cbind
resultando vetores na matriz:saída:
Comparação de desempenho com loop de uma matriz: