gpt4 book ai didi

r - 在 Windows 上的 RMarkdown 中执行 bash (Git-Bash)

转载 作者:可可西里 更新时间:2023-11-01 14:22:27 31 4
gpt4 key购买 nike

我想在 RStudio .rmd 文件中执行 bash 语句,如下所示。

```{bash}
ls
```

起初,RStudio 只会挂起,显示代码块旁边的红色按钮。我发现 OpenSSH 版本的 bash 正在打开一个 shell 窗口,所以通过调整 windows 系统路径,我得到了要执行的 ...\Git\bin\bash.exe 版本。

然后我得到以下红色错误:

bash: C:\Users\{me}\AppData\Local\Temp\RtmpmEF1jM\chunk-code3cb46c6027b3.: No such file or directory

在 Rmarkdown 页面上似乎可执行的仅有的四个引擎(sh、bash、perl 和 python)中的每一个都会发生这种情况(在 block 的右侧显示一个绿色小三角形)。这少于 this page 中描述的语言示例对于 Python、SQL、Bash、Rcpp、Stan、JavaScript 和 CSS,比 knitr::knit_engines 对象中包含的 38 个要少得多。

搜索 StackOverflow,我遇到了 this short example展示如何编写自己的语言引擎。于是修改为访问Git-Bash shell,注册函数如下:

eng_gitbash <- function( options ) { ... } 
knitr::knit_engines$set( gitbash = eng_gitbash )

但是当我执行 block 时,{r, engine='gitbash'},我得到了这个错误。

'"C:\Users\{me}\AppData\Local\Temp\RtmpmEF1jM\chunk-code3cb476f93db0."' is not recognized as an internal or external command, operable program or batch file.

虽然我已经阅读了很多 Yihui Xie 的优秀文档,但我似乎找不到如何测试我编写的 eng_gitbash 函数。如果有人能告诉我如何“可以在命令行中直接使用 options$engine 来执行代码”,我也许能够让我自己的版本工作。

还有一个一般性问题,有人可以指出语言引擎的环境要求的描述 1) 被 RStudio 识别为可执行文件和 2) 使用 Windows 临时文件正确执行。

谢谢,苏

最佳答案

我能够让我的 knitr 语言引擎功能正常工作并“直接”执行它。这很简单:

eng_gitbash <- function( options ) {

# create a temporary file
f <- basename( tempfile( "gitbash", '.', paste('.', "sh", sep = '' ) ) )
on.exit( unlink(f) ) # cleanup temp file on function exit
writeLines( options$code, f )
out <- ''

# if eval != FALSE compile/run the code, preserving output
if (options$eval) {
out <- system2( "gitbash.cmd", f )
}

# spit back stuff to the user
engine_output( options, options$code, out )
}

knitr::knit_engines$set( gitbash = eng_gitbash )

它有点像 Rmarkdown 文件中的一种语言 block 。但正如您从下面的屏幕截图中看到的那样:

  1. 它通过点击绿色小三角形来执行。但是 1 是什么?输出?
  2. 它用 CTRL-SHIFT_ENTER 执行。但是没有绿色的小三角形。
  3. 它不执行并且它们不是小的绿色三角形。

    [上面列出的 3 个 block 的屏幕截图][1](唉,在我有 10 个声望点之前,我不允许发布图像或超过两个链接)

    /li>

我可以忍受这些问题。虽然,当我在 RStudio 的新测试版中尝试时,使用 CTRL_ENTER 执行所有三个 block 工作正常。但是当我去编织整个文件时,我得到了下面下一个屏幕截图中显示的两个错误。

  1. 此错误是由于在第一个 block 中直接执行eng_gitbash 函数引起的。
  2. eng_gitbash 函数似乎没有注册,即使我在编写文件之前获取了一个 R-Script,并且它在执行各个 block 时起作用。

    [上面列出的 2 个错误的屏幕截图][2](唉,在我有 10 个声望点之前,我不允许发布图片或超过两个链接)

    /li>

编织整个页面的设置与编织单个 block 的设置有何不同?

关于r - 在 Windows 上的 RMarkdown 中执行 bash (Git-Bash),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46365985/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com