如何在没有管理员权限的情况下在knitr中使用fig.show = animate

时间:2013-05-10 11:30:55

标签: r animation video ffmpeg knitr

我使用没有管理员权限的Windows,因此我无法在Windows PATH变量中设置路径。

ffmpeg.exe文件位于我的"U:/ProgramFiles/ImageMagick-6.8.5-5/"文件夹中。

我找到了如何使用saveVideo()包的animate函数:

ani.options(ffmpeg = shQuote('U:/ProgramFiles/ImageMagick-6.8.5-5/ffmpeg.exe'))
saveVideo({
  par(mar = rep(3, 4))
  for (i in seq(pi/2, -4/3 * pi, length = 12)) {
    plot(0, 0, pch = 20, ann = FALSE, axes = FALSE)
    arrows(0, 0, cos(i), sin(i))
    axis(1, 0, "VI"); axis(2, 0, "IX")
    axis(3, 0, "XII"); axis(4, 0, "III"); box()
  }
},
        video.name="mavideo.mp4",
        outdir="U:/Data/Rtests/Animation")

但我还没有找到如何在一个块中使用选项fig.show=animate编织Rmd文件,例如:

```{r clock, fig.width=7, fig.height=6, fig.show='animate'}
par(mar = rep(3, 4))
for (i in seq(pi/2, -4/3 * pi, length = 12)) {
    plot(0, 0, pch = 20, ann = FALSE, axes = FALSE)
    arrows(0, 0, cos(i), sin(i))
    axis(1, 0, "VI"); axis(2, 0, "IX")
    axis(3, 0, "XII"); axis(4, 0, "III"); box()
}
```

我试图仅通过更改hook_ffmpeg_html()变量来修改ffmpeg.cmd函数:

```{r}
 hook_ffmpeg_html2 <- function (x, options) 
{ 
    ........ 
    ffmpeg.cmd = paste("-y", "-r", 1/options$interval, 
        "-i", fig.fname, mov.fname) 
    ffmpeg.cmd <-  paste('"U:/ProgramFiles/ImageMagick-6.8.5-5/ffmpeg"', ffmpeg.cmd) 
   ...... 
} 
opts_knit$set(animation.fun = hook_ffmpeg_html2) 
```

但是这个块不起作用,下面是错误消息:

label: unnamed-chunk-1 
Warning in block_exec(params) : 
  failed to tidy R code in chunk <unnamed-chunk-1> 
reason: Error in base::parse(text = text, srcfile = NULL) : 
  21:14: unexpected symbol 
20: options$out.height), if ("controls" %in% mov.opts) 
21: "controls=\\"controls 

2 个答案:

答案 0 :(得分:3)

(我将其从评论转移到答案。)

您不需要Admin privs来设置R当前进程的路径。Sys.setenv(path = "...")会这样做。

答案 1 :(得分:2)

您必须拥有系统管理员权限才能修改PATH。 Windows下有两种类型的环境变量:用户变量和系统变量。您不需要管理员权限来修改前者(您可以在该组中创建一个名为PATH的变量),而后者只需要它。

PATH under Windows