¿Cómo transfiero la salida del paquete R de animación en un marco de proyector?

¿Cómo transfiero la salida del paquete R de animación en un marco de proyector?

Tengo el siguiente código R del animationpaquete que genera un número aleatorio que agrega números aleatorios generados uno tras otro en la pantalla del 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)
  }
}

Quiero que el resultado de este código R esté en un marco de proyector tal como se muestra en Rla terminal.

Probé el siguiente código como mi MWE pero no funcionó

\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, ayúdame

Respuesta1

No he usado R antes. Mi conclusión después de experimentar, hojear manuales y preguntar en Internet:

No utilice el animationpaquete R. Es complicado sin mucho valor añadido.

En su lugar, configure un dispositivo de salida apropiado para los gráficos, como pdf(...), que produce gráficos vectoriales y resultados de varias páginas. Después de ejecutar Rscriptel código R, incruste la salida PDF como animación con \animategraphics.

Haga clic para ejecutar la animación (navegadores basados ​​en Blink [Chrome/Chromium, Opera] para obtener el mejor rendimiento):

Además, el código R original de la pregunta no se ejecuta. A continuación se muestra un ejemplo práctico, con un modelo simple agregado que evita que las partículas superen los límites. Los fotogramas de animación se escriben en un archivo.frames.pdf

Ejecutar en una terminal:

Rscript brnMotion.R

Archivo 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, lualatexo 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}

Respuesta2

Esto simplemente extiende la excelente respuesta de @Alex al tejer el Rcódigo para que el pdfarchivo se cree en un solo paso.

Para continuar, cree un archivo con los fragmentos de Rcódigo incrustados en él tex. RLos fragmentos de código están delimitados por <<>>=y @. Guarde el archivo con una .Rnwextensión (R no web), por ejemplo Daniel.Rnw.

Elegí guardar los cuadros de animación como pngarchivos porque quería cargar el archivo gif. La sintaxis png("frames%d.png")guarda una secuencia de archivos llamados frame1.pngmediante frame100.png. La diapositiva animada se crea de la forma habitual utilizando \animategraphicsel paquete de @Alex animate, que superpone los frame1.pngarchivos frame100.pngpara crear el pdfresultado. El Rcódigo está empaquetado \begin{frame} \end{frame}para colocar los gráficos en una beamerdiapositiva.

Compile el .Rnwarchivo con pdflatexin RStudiou otro editor que lo admita knitr(por ejemplo, WinEdt tiene un complemento para este propósito). RStudioejecutará el Rcódigo para producir un .texarchivo que integre el resultado de ejecutar el Rcódigo con el 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}

ingrese la descripción de la imagen aquí

Respuesta3

No conozco 'R', pero su código (para r) generó algunos errores cuando lo probé en línea.EsteEl sitio proporciona un código R de muestra. Lo compilé para obtener un archivo png como resultado. Le puse un nombre r.pngy utilicé el siguiente código LaTeX para obtener esa imagen en mi presentación. Si desea leer más sobre cómo agregar imágenes en LaTeX, lea graphicxla documentación. Vea el ejemplo a continuación.

\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}

información relacionada