如何解决 R Markdown(Knit)“'closure' 不可子集化”?

How to solve R Markdown (Knit) "'closure' is not subsettable"?

我第一次尝试使用 RMarkdown (Knit) 来制作 pdf。默认文件(文件 > 新文件 > R Markdown)运行良好,它在编译时显示生成的 pdf。例如,下面的代码运行,

```{r cars}
summary(cars)
```

但是,如果我只是用 "myData," 换车,它不会编译并显示

Error in object[[i]] : object of type 'closure' is not subsettable
Calls: <Anonymous> ... withVisible -> eval -> eval -> summary -> summary.default
Execution halted

我在全局环境中加载了 "myData",并且可以在原始 R 脚本中执行其他操作。有人可以提供一些指导吗?非常感谢您的宝贵时间。

运行 一个 Rmarkdown 文件启动一个新的 R 会话。

在新会话中,您可以加载存储在 data 包中的 data.frames,但必须从 Rmarkdown 文档中加载其他数据集。

要让 myData 显示在您的 Rmarkdown 文档中,

  1. 在当前 R 会话中使用 save 将文件保存在某处
  2. 然后在你的Rmarkdown文档中,使用load打开数据集

因此,在您当前的 R 会话中:

save(myData, file="<path>/myData.Rdata")

并在您的 Rmarkdown 文件中:

```{r myDataSummary}
load("<path>/myData.Rdata")
summary(myData)
```

如果您的数据存储为文本文件,并且您不想存储单独的 .R 文件,请直接在 Rmarkdown 文件中使用 read.csv 或朋友。

```{r myDataSummary}
myData <- read.csv("<path>/myCSV.csv")
summary(myData)
```

这是当您尝试子集化(= 通过 x[i]函数 时出现的错误。由于此错误是由您的代码中的 summary(cars) 引起的,因此我们可以推测 cars 对象引用了编织文档范围内的函数。

您可能忘记加载数据,或者您在当前作用域中定义了同名函数。

正如@Imo 所解释的,基本问题是新会话。所以,答案是在 rMarkdown 中添加脚本。但是,它会造成更多的问题。以下是我处理其中一些的方式,

```{r global_options, include=FALSE}
source(file = "C:\Path\to\my\file.R")
knitr::opts_chunk$set(fig.width=12, fig.height=8, fig.path='Figs/',
                      echo=FALSE, warning=FALSE, message=FALSE)
```