アニメーションRパッケージの出力をビーマーフレームに転送するにはどうすればいいですか

アニメーションRパッケージの出力をビーマーフレームに転送するにはどうすればいいですか

パッケージから次の R コードを取得しました。animationこのコードは乱数を生成し、生成された乱数をターミナルに表示しながら次々に追加します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)
  }
}

この R コードの結果を、Rターミナルに表示されるのと同じように、ビーマー フレームに表示したいと思います。

以下のコードをMWEとして試しましたが、動作しませんでした

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

私を助けてください

答え1

私はこれまで R を使ったことがありません。実験したり、マニュアルをざっと読んだり、インターネットで質問したりした結果、次のような結論に達しました。

R パッケージは使用しないでくださいanimation。複雑で付加価値があまりありません。

pdf(...)代わりに、ベクター グラフィックスと複数ページの出力を生成するなどのプロット用の適切な出力デバイスを設定します。RRscriptコードで実行した後、 を使用して PDF 出力をアニメーションとして埋め込みます\animategraphics

クリックするとアニメーションが実行されます (最高のパフォーマンスを得るには、Blink ベースのブラウザ [Chrome/Chromium、Opera] を使用してください)。

また、質問の元のRコードは実行されません。ここでは、粒子が限界を超えて移動しないようにする簡単なモデルを追加した動作例を示します。アニメーションフレームはファイルに書き込まれます。frames.pdf

ターミナルで実行します:

Rscript brnMotion.R

ファイル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入力(pdflatexlualatexまたは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}

答え2

これは、ファイルが 1 つのステップで作成されるRようにコードを編成することで、@Alex の優れた回答を拡張するだけです。pdf

R続行するには、ファイルに埋め込まれたコードのチャンクを含むファイルを作成しますtex。コード チャンクは、とRで区切られます。ファイルを(R no web) 拡張子 (たとえば )で保存します。<<>>=@.RnwDaniel.Rnw

pngをアップロードしたかったので、アニメーション フレームをファイルとして保存することにしましたgif。 構文は、から とpng("frames%d.png")呼ばれる一連のファイルを保存します。 アニメーション スライドは、から までのファイルをレイヤー化して出力を作成する@Alex のパッケージを使用して通常の方法で作成されます。コードは でラップされ、グラフをスライドに表示します。frame1.pngframe100.png\animategraphicsanimateframe1.pngframe100.pngpdfR\begin{frame} \end{frame}beamer

またはそれをサポートする別のエディター(たとえば、WinEdt にはこの目的のためのアドインがあります) を .Rnw使用してファイルをコンパイルします。コードを実行して、コードの実行からの出力をコードと統合するファイルを生成します。pdflatexRStudioknitrRStudioR.texRLaTeX

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

ここに画像の説明を入力してください

答え3

私は「R」を知りませんが、あなたのコード(r用)をオンラインで試してみたところ、いくつかのエラーが発生しました。これサイトにはサンプルの r コードが用意されています。これをコンパイルして、出力として png ファイルを取得しました。名前を付けてr.png、次の LaTeX コードを使用して、プレゼンテーションでその画像を取得しました。LaTeX で画像を追加する方法について詳しく知りたい場合は、graphicxドキュメントをお読みください。以下の例を参照してください。

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

関連情報