Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/github/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么RMarkdown不显示代码输出?_R_R Markdown - Fatal编程技术网

为什么RMarkdown不显示代码输出?

为什么RMarkdown不显示代码输出?,r,r-markdown,R,R Markdown,我正在Windows 10上使用RStudio。请帮助我在编写降价文件时获得要包含在输出文档中的R系统函数的输出。我已经尝试了许多组合块选项,我发现在 在控制台中,输出: system('java -version') 是: java版本“1.8.0_261” Java(TM)SE运行时环境(build 1.8.0_261-b12) Java HotSpot(TM)64位服务器虚拟机(构建25.261-b12,混合模式) 但是,当我将其放入RMardown文档中时: --- title: &q

我正在Windows 10上使用RStudio。请帮助我在编写降价文件时获得要包含在输出文档中的R系统函数的输出。我已经尝试了许多组合块选项,我发现在

在控制台中,输出:

system('java -version')
是:

java版本“1.8.0_261”
Java(TM)SE运行时环境(build 1.8.0_261-b12)
Java HotSpot(TM)64位服务器虚拟机(构建25.261-b12,混合模式)

但是,当我将其放入RMardown文档中时:

---
title: "Code Chunk Not Displaying Output"
output: html_document
---

```{r test}
system('java -version')
```
不幸的是,区块的格式化输出不是显示我的java版本,而是:

## [1] 0
在前面,使用:
system2(“java”,“-version”,stderr=TRUE)
(如果您想确保调用的任何命令,而不仅仅是
java
,那么(1)假设它接受
-version
,并且(2)还添加
stdout=TRUE
。如果没有要捕获的
stdout
,那么它不会造成伤害。)

为什么? 这是关于文件描述符(fd)的(快速)讨论。当程序运行时,它可能会接受文件描述符0上的数据(或其他内容),这通常称为标准输入或
stdin
。它可以在任意数量的文件描述符上发出(发送文本/值/数据),但通常大多数程序至少使用fd1(标准输出,
stdout
),通常但并不总是使用fd2(标准错误,
stderr
)。原因是命令行实用程序可以在
stdout
上捕获预期输出,并在
stderr
上捕获错误/警告。换言之:

#/--这是重定向stdout
#|/--这是重定向stderr
#v v
$somecommand-arg1-arg2>output.log 2>error.log
将预期(正常)输出发送到文件
output.log
,并将任何非标准(或带外或警告或调试或…)发送到
error.log
。在许多情况下,一个空的
错误.log
是一件好事,也是“预期的”

在我的初始测试期间,由于我没有java,我使用的是
ls--version
,而
/bin/ls
将其版本信息发送到
stdout
。显然,
java
使用了
stderr

(我最后通过切换到一个应该使用
stderr
的命令进行了验证:在没有
java
的情况下,最简单的复制方法是:

---
title: "Code Chunk Not Displaying Output"
output: html_document
---

```{r test}
system("ls --versiommmmm", intern = TRUE)
```
其中(1)没有预期的
ls:unknown选项--versiommmm
输出,以及(2)返回
#[1]2
,指示退出状态为2。(大多数实用程序使用退出状态为0表示“一切正常”,以及其他任何错误。一些实用程序甚至会发出特定错误的特定退出状态,但通常可以安全地假设“not
0
表示某些错误条件”。)

为了让R执行系统调用并捕获stderr,我切换到
system2
,它允许人们捕获
stderr=
(以及
stdout=

注:

  • system2
    将要运行的命令作为其第一个参数,然后将所有后续参数作为字符向量,如下所示:

    system2(“java”,c(“Echo”,“喝热java”))
    
    将使用两个参数调用
    java
    “Echo”
    和字符串(实际上,这不太正确……请参阅下一个项目符号)

  • system
    system2
    在引用东西方面都做得很差。如果您的任何参数都有嵌入空格,例如前一个项目符号中的调用,那么该命令实际上看起来是单个参数。因此前一个项目符号的命令实际上使用四个参数调用
    java
    ,相当于<代码> C(“Enter”,“Cudie”,“Head”,“Head”,“java”)< /C>。(我和很多人认为这是一个很重要的问题,代码< Stult2S/<代码>。解决方案包括使用<代码> SqOuts自己,或者使用<代码> Pyrxx < /Cuth>包,这是正确的。
  • 不同的参数,其中
    system(…,intern=TRUE)
    的等价物是
    system2(…,stdout=TRUE)
    …您可以使用
    stderr=


来自“intern:一个逻辑(非NA),指示是否将命令的输出捕获为R字符向量”。请尝试
system(“java-version”,intern=TRUE)
(您看到的是退出代码,其中“0”通常表示“未遇到错误”)。可能与此相关。请尝试
system2(“java”,即--version”,stdout=TRUE,stderr=TRUE)
r2evans有效!想从中得出一个正式答案吗?注意,它应该是-version而不是-version还有一件事,stdout参数不是必需的,它有效:system2(“java”,“-version”,stderr=TRUE)