Como transfiro a saída do pacote R de animação em um quadro do beamer

Como transfiro a saída do pacote R de animação em um quadro do beamer

Eu tenho o seguinte código R do animationpacote que gera um número aleatório que adiciona números aleatórios gerados um após o outro em exibição no Rterminal.

library("animation")
brownian.motion():
function(n=10,xlim=c(-20,20),ylim=c(-20,20))
{
  x=rnorm(n)
  y=rnorm(n)
  for (i in seq_len(ani.options("nmax"))) {
   dev.hold()
    plot(x,y,xlim = xlim,ylim = ylim)
    text(x,y)
    x=x+rnorm(n)
    y=y+rnorm(n)
  }
}

Quero que o resultado deste código R esteja em um quadro de projetor exatamente como está sendo exibido no Rterminal.

Tentei o código abaixo como meu MWE, mas não funcionou

\documentclass{beamer}
\begin{document}
 \begin{frame}
%beginning of R code
library("animation")
brownian.motion():
function(n=10,xlim=c(-20,20),ylim=c(-20,20))
{
  x=rnorm(n)
  y=rnorm(n)
  for (i in seq_len(ani.options("nmax"))) {
   dev.hold()
    plot(x,y,xlim = xlim,ylim = ylim)
    text(x,y)
    x=x+rnorm(n)
    y=y+rnorm(n)
  }
}  
% end of R code
 \end{frame}
\end{document}

Por favor, me ajude

Responder1

Eu não usei R antes. Minha conclusão depois de experimentar, folhear manuais e perguntar na internet:

Não use o animationpacote R. É complicado sem muito valor acrescentado.

Em vez disso, defina um dispositivo de saída apropriado para gráficos, como pdf(...), que produz gráficos vetoriais e saída de várias páginas. Depois de executar Rscripto código R, incorpore a saída do PDF como animação com a extensão \animategraphics.

Clique para executar a animação (navegadores baseados em Blink [Chrome/Chromium, Opera] para melhor desempenho):

Além disso, o código R original da questão não funciona. Aqui está um exemplo prático, com um modelo simples adicionado que evita que as partículas ultrapassem os limites. Os quadros de animação são gravados em arquivoframes.pdf

Execute em um terminal:

Rscript brnMotion.R

Arquivo brnMotion.R:

brownianMotion <-
function(n=10,xlim=c(-20,20),ylim=c(-20,20), steps=50)
{
  x=rnorm(n) # random starting position
  y=rnorm(n)
  for (i in 1:steps) {
    plot(x,y,xlim = xlim,ylim = ylim)
    text(x,y)

    # iterate over particles
    for(k in 1:n){
      walk=rnorm(2); # random move of particle

      x[k]=x[k]+walk[1] # new position
      y[k]=y[k]+walk[2]

      # simple model (at most two rebounds) that prevents a particle
      # from moving past the limits
      if(x[k]<xlim[1]) x[k]=2*xlim[1]-x[k]
      if(x[k]>xlim[2]) x[k]=2*xlim[2]-x[k]
      if(y[k]<ylim[1]) y[k]=2*ylim[1]-y[k]
      if(y[k]>ylim[2]) y[k]=2*ylim[2]-y[k]
    }
  }
}

pdf("frames.pdf")                # output device and file name
par(xaxs="i", yaxs="i", pty="s") # square plot region
par(mai=c(0.9,0.9,0.2,0.2))      # plot margins

brownianMotion(n=20, steps=400)  # 20 particles, 400 time steps

Entrada LaTeX ( pdflatex, lualatexou xelatex):

\documentclass[aspectratio=169]{beamer}

\usepackage{animate}
\usepackage{graphicx}

\begin{document}

\begin{frame}{Brownian Motion}
  \begin{center}
  \animategraphics[width=0.5\linewidth,controls]{25}{frames}{}{}
  \end{center}
\end{frame}

\end{document}

Responder2

Isso apenas estende a excelente resposta de @Alex, tricotando o Rcódigo para que o pdfarquivo seja criado em uma única etapa.

Para continuar, crie um arquivo com os pedaços de Rcódigo incorporados no texarquivo. Rpedaços de código são delimitados por <<>>=e @. Salve o arquivo com uma .Rnwextensão (R ​​sem web), digamos Daniel.Rnw.

Optei por salvar os quadros de animação como pngarquivos porque queria fazer upload do arquivo gif. A sintaxe png("frames%d.png")salva uma sequência de arquivos chamados frame1.pngpor meio de frame100.png. O slide animado é feito da maneira usual usando o pacote \animategraphics@Alex animate, que coloca os arquivos em frame1.pngcamadas frame100.pngpara criar a pdfsaída. O Rcódigo é agrupado \begin{frame} \end{frame}para colocar os gráficos em um beamerslide.

Compile o .Rnwarquivo com pdflatexum RStudioou outro editor que suporte knitr(por exemplo, o WinEdt possui um add-in para esse fim). RStudioexecutará o Rcódigo para produzir um .texarquivo, que integra a saída da execução do Rcódigo com o LaTeXcódigo.

\documentclass{beamer}
\usepackage{animate}
\begin{document}

\begin{frame}
%beginning of R code
<<code,echo=FALSE,warning=FALSE,results='hide'>>=
brownianMotion <-
function(n=10,xlim=c(-20,20),ylim=c(-20,20), steps=50)
{
  x=rnorm(n)
  y=rnorm(n)
  for (i in 1:steps) {
    plot(x,y,xlim = xlim,ylim = ylim)
    text(x,y)

    # iterate over particles
    for(k in 1:n){
      walk=rnorm(2); # random move of particle

      x[k]=x[k]+walk[1] # new position
      y[k]=y[k]+walk[2]

      # simple model for preventing a particle from moving past the limits
      if(x[k]<xlim[1]) x[k]=xlim[1]
      if(x[k]>xlim[2]) x[k]=xlim[2]
      if(y[k]<ylim[1]) y[k]=ylim[1]
      if(y[k]>ylim[2]) y[k]=ylim[2]
    }
  }
}

png("frames%d.png")              # output device and file name
par(xaxs="i", yaxs="i", pty="s") # square plot region
par(mai=c(0.9,0.9,0.2,0.2))      # plot margins

brownianMotion(n=20, steps=100)  # 20 particles, 100 time steps
dev.off()
@
% end of R code
\begin{center}
\animategraphics[autoplay,controls,palindrome,height=0.7\textheight]{5}{frames}{1}{100}%
\end{center}
\end{frame}

\end{document}

insira a descrição da imagem aqui

Responder3

Não sei 'R', mas seu código (para r) resultou em alguns erros quando tentei online.Essesite fornece um exemplo de código R. Eu compilei para obter um arquivo png como saída. Dei um nome a ele r.pnge usei o seguinte código LaTeX para obter essa imagem em minha apresentação. Se você quiser ler mais sobre como adicionar imagens no LaTeX, leia graphicxa documentação. Veja o exemplo abaixo.

\documentclass{beamer}
\usepackage{graphicx}

\begin{document}
    \begin{frame}{A graph}
        \centering
        \includegraphics[height=6cm,width=\textwidth]{r} % In the {} use the appropriate file name. (case-sensitive)
    \end{frame}
\end{document}

informação relacionada