Wie übertrage ich die Ausgabe eines Animationspakets im R-Format auf einen Beamer-Frame?

Wie übertrage ich die Ausgabe eines Animationspakets im R-Format auf einen Beamer-Frame?

Ich habe den folgenden R-Code aus animationeinem Paket, das eine Zufallszahl generiert, die auf dem Terminaldisplay nacheinander generierte Zufallszahlen hinzufügt R.

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

Ich möchte, dass das Ergebnis dieses R-Codes in einem Beamer-Frame angezeigt wird, genau wie es auf dem Terminal angezeigt wird R.

Ich habe den folgenden Code als mein MWE ausprobiert, aber er hat nicht funktioniert

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

Bitte hilf mir

Antwort1

Ich habe R noch nie benutzt. Mein Fazit nach Experimenten, dem Durchblättern von Handbüchern und dem Nachfragen im Internet:

Verwenden Sie nicht das animationR-Paket. Es ist kompliziert und bietet keinen großen Mehrwert.

Legen Sie stattdessen ein geeignetes Ausgabegerät für Diagramme fest, z. B. pdf(...), das Vektorgrafiken und mehrseitige Ausgaben erzeugt. RscriptBetten Sie die PDF-Ausgabe nach der Ausführung des R-Codes mit als Animation ein \animategraphics.

Klicken Sie, um die Animation auszuführen (Blink-basierte Browser [Chrome/Chromium, Opera] für optimale Leistung):

Außerdem läuft der ursprüngliche R-Code in der Frage nicht. Hier ist ein funktionierendes Beispiel mit einem einfachen Modell, das verhindert, dass Partikel über die Grenzen hinausgehen. Animationsbilder werden in eine Datei geschriebenframes.pdf

In einem Terminal ausführen:

Rscript brnMotion.R

Datei 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

LaTeX-Eingabe ( pdflatex, lualatexoder 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}

Antwort2

Dies erweitert lediglich die hervorragende Antwort von @Alex, indem der RCode so verknüpft wird, dass die pdfDatei in einem Schritt erstellt wird.

Um fortzufahren, erstellen Sie eine Datei mit den Rdarin eingebetteten Codeblöcken tex. RCodeblöcke werden durch <<>>=und abgegrenzt @. Speichern Sie die Datei mit der .RnwErweiterung (R kein Web), beispielsweise Daniel.Rnw.

Ich habe mich entschieden, die Animationsframes als pngDateien zu speichern, weil ich sie hochladen wollte gif. Die Syntax png("frames%d.png")speichert eine Sequenz von Dateien, die frame1.pngdurch genannt werden frame100.png. Die animierte Folie wird einfach auf die übliche Weise erstellt, indem das Paket \animategraphicsvon @Alex verwendet wird, das die durch Dateien animateschichtet, um die Ausgabe zu erstellen. Der Code wird in verpackt, um die Grafiken auf eine Folie zu bringen .frame1.pngframe100.pngpdfR\begin{frame} \end{frame}beamer

Kompilieren Sie die .RnwDatei mit pdflatexin RStudiooder einem anderen Editor, der dies unterstützt knitr(z. B. verfügt WinEdt über ein Add-In für diesen Zweck). RStudioführt den RCode aus, um eine Datei zu erstellen , die die Ausgabe aus der Ausführung des Codes mit dem Code .texintegriert .RLaTeX

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

Bildbeschreibung hier eingeben

Antwort3

Ich kenne „R“ nicht, aber Ihr Code (für r) hat einige Fehler verursacht, als ich ihn online ausprobiert habe.DasDie Site bietet einen Beispiel-R-Code. Ich habe ihn kompiliert, um eine PNG-Datei als Ausgabe zu erhalten. Ich habe ihn benannt r.pngund den folgenden LaTeX-Code verwendet, um dieses Bild in meine Präsentation einzufügen. Wenn Sie mehr darüber erfahren möchten, wie Sie Bilder in LaTeX hinzufügen, lesen Sie bitte die graphicxDokumentation. Siehe das Beispiel unten.

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

verwandte Informationen