将 Rmd 编织为 PDF 时 knitr 出错,但代码运行正常?
Error with knitr when knitting Rmd to PDF, but code runs fine?
我正在尝试编织一个 Rmd 文件,代码运行良好,但是当我尝试编织时,我返回并在它到达我的第一个 R 代码块时出错:
Error in as.data.frame.default(x) :
cannot coerce class '"function"' to a data.frame
Calls: <Anonymous> ... merge.default -> merge -> as.data.frame -> as.data.frame.default
Execution halted
如果我删除我的第一块代码,无论新的第一块代码是什么,都会弹出类似的错误。
编辑:这是我的第一个
---
title: "[title]"
author: "[Name]"
output:
pdf_document: default
word_document:
fig_caption: yes
---
library(knitr)
library(png)
#The code book of the two data sets can be found in these two links:
wwwn.cdc.gov/Nchs/Nhanes/2015-2016/DEMO_I.htm
wwwn.cdc.gov/Nchs/Nhanes/2015-2016/CBQ_I.htm
install.packages("Hmisc")
library(Hmisc)
demo <- sasxport.get("https://wwwn.cdc.gov/Nchs/Nhanes/2015-2016/DEMO_I.XPT")
cbq <- sasxport.get("https://wwwn.cdc.gov/Nchs/Nhanes/2015-2016/CBQ_I.XPT")
`str(demo)`
`str(cbq)`
```{r}
eat <- merge(demo, cbq, by="seqn")
```
```{r}
dim(eat)
# = 52 columns
# = 9,971 rows
# OR can use
ncol(eat)
nrow(eat)
```
你的问题是可重复性和未定义的变量。您问题中的大部分代码不在代码块中,因此它将 print (尽管不是代码)但不会创建变量、加载库等。考虑到这一点,你可能会意识到 demo
和 cqb
从未在文档中定义。
这意味着如果其中一个作为对象存在于基础 R 环境中,那么它们存在但不是您认为的那样。在这种情况下,demo
实际上是一个函数 utils::demo
并且可用,因此 merge
试图用它做一些事情。不幸的是,正如您所料,没有逻辑可以对函数执行类似合并的操作。
我可以在我的控制台上重现你的错误:
ls()
# character(0)
# 'demo' not defined as a frame, so still utils::demo
# 'cbq' does not matter, because 'merge' cannot get past the problem with 'demo'
merge(demo, cbq)
# Error in as.data.frame.default(x) :
# cannot coerce class '"function"' to a data.frame
解决方法可能是将您的初始代码放在一个代码块中。
我不知道你打算用那里的 URL 做什么,但这里有一个不太畸形的 Rmd:
---
title: "[title]"
author: "[Name]"
output:
pdf_document: default
word_document:
fig_caption: yes
---
The code book of the two data sets can be found in these two links:
- wwwn.cdc.gov/Nchs/Nhanes/2015-2016/DEMO_I.htm
- wwwn.cdc.gov/Nchs/Nhanes/2015-2016/CBQ_I.htm
```{r}
library(knitr)
library(png)
install.packages("Hmisc")
library(Hmisc)
demo <- sasxport.get("https://wwwn.cdc.gov/Nchs/Nhanes/2015-2016/DEMO_I.XPT")
cbq <- sasxport.get("https://wwwn.cdc.gov/Nchs/Nhanes/2015-2016/CBQ_I.XPT")
```
`str(demo)`
`str(cbq)`
```{r}
eat <- merge(demo, cbq, by="seqn")
```
```{r}
dim(eat)
# = 52 columns
# = 9,971 rows
# OR can use
ncol(eat)
nrow(eat)
```
关于此的一些说明:
除非这旨在始终 运行 在无菌 R 环境中(例如,docker 容器),否则我发现 install.packages
不仅很差设计,但对可能使用此 Rmd 文档的任何其他人也不公平:也许我打算保留稳定的旧包版本(可再现性!),但仅通过呈现您的文档,我的包就可撤销地升级了。
您 `str(demo)`
正在以固定宽度字体打印文字字符串 "str(demo)"
,但 运行 什么也没打印。这可能会进入代码块,或者您可以通过使用 `r str(demo)`
(即反引号、"r"、space、代码、反引号)来使用内联代码。
我正在尝试编织一个 Rmd 文件,代码运行良好,但是当我尝试编织时,我返回并在它到达我的第一个 R 代码块时出错:
Error in as.data.frame.default(x) :
cannot coerce class '"function"' to a data.frame
Calls: <Anonymous> ... merge.default -> merge -> as.data.frame -> as.data.frame.default
Execution halted
如果我删除我的第一块代码,无论新的第一块代码是什么,都会弹出类似的错误。
编辑:这是我的第一个
---
title: "[title]"
author: "[Name]"
output:
pdf_document: default
word_document:
fig_caption: yes
---
library(knitr)
library(png)
#The code book of the two data sets can be found in these two links:
wwwn.cdc.gov/Nchs/Nhanes/2015-2016/DEMO_I.htm
wwwn.cdc.gov/Nchs/Nhanes/2015-2016/CBQ_I.htm
install.packages("Hmisc")
library(Hmisc)
demo <- sasxport.get("https://wwwn.cdc.gov/Nchs/Nhanes/2015-2016/DEMO_I.XPT")
cbq <- sasxport.get("https://wwwn.cdc.gov/Nchs/Nhanes/2015-2016/CBQ_I.XPT")
`str(demo)`
`str(cbq)`
```{r}
eat <- merge(demo, cbq, by="seqn")
```
```{r}
dim(eat)
# = 52 columns
# = 9,971 rows
# OR can use
ncol(eat)
nrow(eat)
```
你的问题是可重复性和未定义的变量。您问题中的大部分代码不在代码块中,因此它将 print (尽管不是代码)但不会创建变量、加载库等。考虑到这一点,你可能会意识到 demo
和 cqb
从未在文档中定义。
这意味着如果其中一个作为对象存在于基础 R 环境中,那么它们存在但不是您认为的那样。在这种情况下,demo
实际上是一个函数 utils::demo
并且可用,因此 merge
试图用它做一些事情。不幸的是,正如您所料,没有逻辑可以对函数执行类似合并的操作。
我可以在我的控制台上重现你的错误:
ls()
# character(0)
# 'demo' not defined as a frame, so still utils::demo
# 'cbq' does not matter, because 'merge' cannot get past the problem with 'demo'
merge(demo, cbq)
# Error in as.data.frame.default(x) :
# cannot coerce class '"function"' to a data.frame
解决方法可能是将您的初始代码放在一个代码块中。
我不知道你打算用那里的 URL 做什么,但这里有一个不太畸形的 Rmd:
---
title: "[title]"
author: "[Name]"
output:
pdf_document: default
word_document:
fig_caption: yes
---
The code book of the two data sets can be found in these two links:
- wwwn.cdc.gov/Nchs/Nhanes/2015-2016/DEMO_I.htm
- wwwn.cdc.gov/Nchs/Nhanes/2015-2016/CBQ_I.htm
```{r}
library(knitr)
library(png)
install.packages("Hmisc")
library(Hmisc)
demo <- sasxport.get("https://wwwn.cdc.gov/Nchs/Nhanes/2015-2016/DEMO_I.XPT")
cbq <- sasxport.get("https://wwwn.cdc.gov/Nchs/Nhanes/2015-2016/CBQ_I.XPT")
```
`str(demo)`
`str(cbq)`
```{r}
eat <- merge(demo, cbq, by="seqn")
```
```{r}
dim(eat)
# = 52 columns
# = 9,971 rows
# OR can use
ncol(eat)
nrow(eat)
```
关于此的一些说明:
除非这旨在始终 运行 在无菌 R 环境中(例如,docker 容器),否则我发现
install.packages
不仅很差设计,但对可能使用此 Rmd 文档的任何其他人也不公平:也许我打算保留稳定的旧包版本(可再现性!),但仅通过呈现您的文档,我的包就可撤销地升级了。您
`str(demo)`
正在以固定宽度字体打印文字字符串"str(demo)"
,但 运行 什么也没打印。这可能会进入代码块,或者您可以通过使用`r str(demo)`
(即反引号、"r"、space、代码、反引号)来使用内联代码。