Plotar uma lista de funções em um único gráfico

Gostaria de algo semelhante ao operacionalizado pela função fabaixo. Mas gostaria de plotar uma lista de funções e não de diferentes y como é exemplificado, ou seja, as equações obtidas pelos diferentes y. x=c(1,2,3,4,5,6) y1=c(1,2,3,4,5,6) y2=c(10,11,12,13,14,15) y3=c(15,14,13,12,11,10) y4=c(6,5,4,3,2,1) f=function(x,...){x=x; y=data.frame(...); matplot(x,y, type="o")} f(x,y1,y2,y3,y4) Como fazer um processo semelhante com funções? Talvez partindo daqui? Usando lapply ou outro recurso?? a=list();a$a1=2;a$a2=3 x=c(1,2,3,4) l1=lapply(a, function(ai) {ai*x}) l1 a=c(1,2,3,4) x=c(1,2,3,4,5,6) l2=lapply(a, function(ai) {ai*x}) l2

set.seed(1) x0 = rnorm(10) f1 = function(x) x^2 f2 = dnorm f3 = function(x) x^3 listaFs = list(f1, f2, f3) lapply(listaFs, function(myf, myarg) myf(myarg), x0)

E como faz o gráfico? set.seed(1) x0 = rnorm(10) f1 = function(x) x^2 f2 = dnorm f3 = function(x) x^3 listaFs = list(f1, f2, f3) lapply(listaFs, function(myf, myarg) myf(myarg), x0)

set.seed(1) x0 = sort(rnorm(10)) f1 = function(x) x^2 f2 = dnorm f3 = function(x) x^3 listaFs = list(f1, f2, f3) results = do.call(cbind, lapply(listaFs, function(myf, myarg) myf(myarg), x0)) matplot(x0, results, type='l')

Benilton, o que eu quero é um plot das funções e não dos pontos. Operacionalizar o que esta em vermelho abaixo. Obrigado. Emmanuel x0 = sort(rnorm(10)) f1 = function(x) x^1 f2 = function(x) x^2 f3 = function(x) x^3 listaFs = list(f1, f2, f3) results = do.call(cbind, lapply(listaFs, function(myf, myarg) myf(myarg), x0)) matplot(x0, results, type='l') plot(f1, 1,10) plot(f2, 1,10, add=T, col=2, lty=2) plot(f3, 1,10, add=T, col=3, lty=3) ________________________________ De: Benilton Carvalho <beniltoncarvalho@gmail.com> Para: r-br@listas.c3sl.ufpr.br Enviadas: Terça-feira, 6 de Dezembro de 2011 3:10 Assunto: Re: [R-br] Plotar uma lista de funções em um único gráfico set.seed(1) x0 = sort(rnorm(10)) f1 = function(x) x^2 f2 = dnorm f3 = function(x) x^3 listaFs = list(f1, f2, f3) results = do.call(cbind, lapply(listaFs, function(myf, myarg) myf(myarg), x0)) matplot(x0, results, type='l') _______________________________________________ R-br mailing list R-br@listas.c3sl.ufpr.br https://listas.inf.ufpr.br/cgi-bin/mailman/listinfo/r-br Leia o guia de postagem (http://www.leg.ufpr.br/r-br-guia) e forneça código mínimo reproduzível.

O que o Benilton te passou é exatamente o que você precisa, na minha humilde interpretação do problema. Quando você usa plot() de uma função, na realidade você tá fazendo um curve(), que nada mais é que unir com linhas os pontos, obtidos com x e f(x) para um grid fino de x. Então, raciocinando dessa forma e explorando o CMR do Benilton, é só fazer o mesmo: criar um vetor x com grid tão fino quanto queira. set.seed(1) x0 <- seq(0,2,l=100) # só criar o grid tão fino quanto queira f1 <- function(x) x^2 f2 <- dnorm f3 <- function(x) x^3 f4 <- cos listaFs <- list(f1, f2, f3, f4) results <- do.call(cbind, lapply(listaFs, function(myf, myarg) myf(myarg), x0)) matplot(x0, results, type='l') Fique a vontade para mexer no CMR, criar/alterar as coisas e consultar o help das funções envolvidas. À disposição. Walmes. ========================================================================== Walmes Marques Zeviani LEG (Laboratório de Estatística e Geoinformação, 25.450418 S, 49.231759 W) Departamento de Estatística - Universidade Federal do Paraná fone: (+55) 41 3361 3573 VoIP: (3361 3600) 1053 1173 e-mail: walmes@ufpr.br twitter: @walmeszeviani homepage: http://www.leg.ufpr.br/~walmes linux user number: 531218 ==========================================================================

Qual a função que este comando do.call tem? O que o Benilton te passou é exatamente o que você precisa, na minha humilde interpretação do problema. Quando você usa plot() de uma função, na realidade você tá fazendo um curve(), que nada mais é que unir com linhas os pontos, obtidos com x e f(x) para um grid fino de x. Então, raciocinando dessa forma e explorando o CMR do Benilton, é só fazer o mesmo: criar um vetor x com grid tão fino quanto queira. set.seed(1) x0 <- seq(0,2,l=100) # só criar o grid tão fino quanto queira f1 <- function(x) x^2 f2 <- dnorm f3 <- function(x) x^3 f4 <- cos listaFs <- list(f1, f2, f3, f4) results <- do.call(cbind, lapply(listaFs, function(myf, myarg) myf(myarg), x0)) matplot(x0, results, type='l') Fique a vontade para mexer no CMR, criar/alterar as coisas e consultar o help das funções envolvidas. À disposição. Walmes. ========================================================================== Walmes Marques Zeviani LEG (Laboratório de Estatística e Geoinformação, 25.450418 S, 49.231759 W) Departamento de Estatística - Universidade Federal do Paraná fone: (+55) 41 3361 3573 VoIP: (3361 3600) 1053 1173 e-mail: walmes@ufpr.br twitter: @walmeszeviani homepage: http://www.leg.ufpr.br/~walmes linux user number: 531218

Mauro, Os resultados do lapply saem em uma lista... ao usar do.call, você realiza a "ligação" entre os elementos da lista por um rbind(), portanto a saída é uma matriz! com o mesmo número de colunas que os n elementos da lista e linhas correspondentes a n * o número de linhas de cada elemento da lista. att, FH 2011/12/6 Mauro Sznelwar <sznelwar@uol.com.br>
** *Qual a função que este comando do.call tem?*
O que o Benilton te passou é exatamente o que você precisa, na minha humilde interpretação do problema. Quando você usa plot() de uma função, na realidade você tá fazendo um curve(), que nada mais é que unir com linhas os pontos, obtidos com x e f(x) para um grid fino de x. Então, raciocinando dessa forma e explorando o CMR do Benilton, é só fazer o mesmo: criar um vetor x com grid tão fino quanto queira.
set.seed(1) x0 <- seq(0,2,l=100) # só criar o grid tão fino quanto queira f1 <- function(x) x^2 f2 <- dnorm f3 <- function(x) x^3 f4 <- cos listaFs <- list(f1, f2, f3, f4) results <- do.call(cbind, lapply(listaFs, function(myf, myarg) myf(myarg), x0)) matplot(x0, results, type='l')
Fique a vontade para mexer no CMR, criar/alterar as coisas e consultar o help das funções envolvidas.
À disposição. Walmes.
========================================================================== Walmes Marques Zeviani LEG (Laboratório de Estatística e Geoinformação, 25.450418 S, 49.231759 W) Departamento de Estatística - Universidade Federal do Paraná fone: (+55) 41 3361 3573 VoIP: (3361 3600) 1053 1173 e-mail: walmes@ufpr.br twitter: @walmeszeviani homepage: http://www.leg.ufpr.br/~walmes linux user number: 531218
_______________________________________________ R-br mailing list R-br@listas.c3sl.ufpr.br https://listas.inf.ufpr.br/cgi-bin/mailman/listinfo/r-br Leia o guia de postagem (http://www.leg.ufpr.br/r-br-guia) e forneça código mínimo reproduzível.
participantes (5)
-
Benilton Carvalho
-
Emmanuel Arnhold
-
FHRB Toledo
-
Mauro Sznelwar
-
Walmes Zeviani