2016-06-21 21 views
2

我想首次使用RMarkdown(針織)生成PDF。默認文件(File> New File> R Markdown)運行良好,它顯示編譯時生成的pdf。例如,下面的代碼運行,如何解決R Markdown(針織)「'關閉'不可子集」?

```{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腳本中執行其他操作。有人可以提供一些指導。非常感謝您的寶貴時間。

+0

我認爲你的數據'myData'不適用於'summary()'。嘗試'print(myData)'而不是'summary(myData)',你會在你的PDF中得到一些結果。 –

+0

嗨,謝謝,但它沒有奏效。 Summary()停止了編譯,print()打印了pdf但不打印myData摘要。它打印幾個功能,元數據等。謝謝。 –

+0

好吧,'knit'默認不會使用全球環境,所以這是您的主要問題。 – hrbrmstr

回答

3

運行Rmarkdown文件開始一個新的R會話。

在新會話中,您可以加載存儲在data包中的data.frames,但其他數據集必須從Rmarkdown文檔中加載。

要獲得的myData您Rmarkdown文檔中顯示,

  1. save某個文件中保存您的當前R會議
  2. 那麼你Rmarkdown文檔中,使用load開拓數據集

所以,在當前的R對話:

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

,並在您Rmarkdown文件:

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

如果您的數據存儲爲文本文件,並且不希望保存一個獨立的.R文件,您Rmarkdown文件中直接使用read.csv或朋友。

```{r myDataSummary} 
myData <- read.csv(<path>) 
summary(myData) 
``` 
+0

謝謝。這是解決方案。謝謝你的解釋,這更重要。我也在這裏添加了我的解決方案。 –

0

這是當你試圖子集(=通過x[i])一功能你的錯誤。由於此錯誤是由代碼中的summary(cars)造成的,因此我們可能推測cars對象引用文檔所針對的範圍中的函數。

您可能忘記了加載數據,或者您有一個在當前範圍中定義的同名函數。

0

正如@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) 
```