【问题标题】:R markdown: knitr and read_chunk not workingR降价:knitr和read_chunk不起作用
【发布时间】:2019-10-02 14:18:02
【问题描述】:

我使用的是 R 版本 3.5.3 (2019-03-11)

我有一个 Rmd 文件,我试图在一个块中运行以下代码来获取存储在同一项目中的另一个 .R 文件:

library(knitr)
```{r echo=FALSE}
# Read in all functions
read_chunk('functions/Functions.R')
```

当我单独运行这个块时,我没有收到任何错误或警告消息,但没有加载存储在“Functions.R”中的函数。

有人知道为什么会这样吗?

这是我使用的目录结构:

read_chunk('functions/Functions.R')

下面是“Functions.R”中的一些代码示例:

library(plyr)
library(dplyr)

round_up = function(x, n) {
  posneg = sign(x)
  z = abs(x)*10^n
  z = z + 0.5
  z = trunc(z)
  z = z/10^n
  z*posneg
}

请注意,如果我打开该脚本并在其上运行source(),Fucntions.R 运行良好。我没有收到任何错误或警告消息,因此我确信 Functions.R 中的代码没有任何问题

【问题讨论】:

  • 您能否阐明您正在使用的目录结构并添加一个可能在Functions.R 中的示例?这可能会帮助某人帮助您进行故障排除。要在您的问题中显示您的代码块,请在粘贴块的三个反引号之前使用四个反引号。
  • @aosmith 已建议编辑

标签: r r-markdown knitr


【解决方案1】:

如果您想加载存储在脚本中的函数以供使用,我认为您需要source() 而不是knitr::read_chunk()

在这种情况下,您将使用 source() 并在此块或其他块中使用您的函数。

```{r echo = FALSE}
# Read in all functions
# knitr::read_chunk('functions/Functions.R')
source('functions/Functions.R')
```

```{r}
round_up(1, 2)
```

如果您想使用read_chunk() 而不是您需要 1.,在脚本中命名块,2.,在 RMD 中使用相同的名称创建块。

这里的代码将Functions.R 脚本中的第一个函数命名为块my-label

## ---- my-label ----
round_up = function(x, n) {
     posneg = sign(x)
     z = abs(x)*10^n
     z = z + 0.5
     z = trunc(z)
     z = z/10^n
     z*posneg
}

现在您可以使用read_chunk() 来读取块。具有相同块名称的空块实际上运行该块中的代码。完成后,该功能在 RMD 中可用。

```{r echo = FALSE}
# Read in all functions
knitr::read_chunk('functions/Functions.R')
# source('functions/Functions.R')
```

```{r my-label, echo = FALSE}
```

```{r}
round_up(1, 2)
```

我的印象是read_chunk() 的一个目标是允许您将结果插入到 RMD 中,而不必在当前文档中包含所有代码或运行脚本中的所有代码。但是,这依赖于块和块名称。 source() 功能是读取整个脚本,这似乎更符合您在此特定情况下尝试执行的操作。

【讨论】:

    猜你喜欢
    • 2016-12-13
    • 1970-01-01
    • 1970-01-01
    • 2015-07-09
    • 1970-01-01
    • 2013-03-08
    • 1970-01-01
    • 2018-12-26
    • 2022-10-26
    相关资源
    最近更新 更多