如何使用render在R Rmarkdown文件中的函数内部使用变量

时间:2017-12-04 05:54:28

标签: r render r-markdown

我有一个与rmarkdown::render编织的rmarkdown文件:我在.R中进行所有数据处理然后,我使用函数编写Rmd。我的问题是,如果我封装了render函数以使我的代码更具可读性,它就不再起作用了。这是一个基本的例子: - 我的.Rmd文件:

---
title: "test"
output: html_document
---

```{r}
printA()
```

我的R代码有效:

library(rmarkdown)
a<- 5
printA <- function() {
  return(a)
}
render("c:/users/db7trs/desktop/test.Rmd")

但是当我将其封装在一个函数中时,它不再起作用了:

library(rmarkdown)
printA <- function() {
  return(a)
}
rendre <- function(){
  a <- 5
  render("c:/users/db7trs/desktop/test.Rmd")
}

rendre()

使用此代码,我有一个非常明确的错误:Quitting from lines 7-8 Error in printA() : object 'a' not found

如果我明确地创建一个printA函数的参数,这个问题很容易解决,在这种情况下无论如何都是一个很好的做法,但我不明白为什么它在这两种情况下的工作方式不同。

1 个答案:

答案 0 :(得分:1)

您的问题更多的是函数printA未在rendre()函数中声明。 (即使错误消息说明a)。因此,您可以在rendre()内或Rmd文件中声明您的函数。

rendre()函数

rendre <- function(){
  printA <- function() {
    return(a)
  }
  a <- 5
  render("c:/users/db7trs/desktop/test.Rmd")
}

test.Rmd

---
title: "test"
output: html_document
---

```{r}
printA <- function() {
  return(a)
}
printA()
```