gpt4 book ai didi

r - 基于字符向量进行子集化时,knit_expand 失败

转载 作者:行者123 更新时间:2023-12-04 10:45:51 24 4
gpt4 key购买 nike

我实际上是在尝试修改 this answer以编程方式为变量的每个级别生成带有图的 block 。

然而,在我的特定情况下,我传递了一个字符向量以用于后续子集化,这似乎是代码失败的根源。

# My report (test.Rmd)

```{r}
library(ggplot2)
library(knitr)
data(diamonds)
diamonds$cut <- factor(gsub(" ", "_", diamonds$cut)) # Get rid of spaces
cut.levels <- levels(diamonds$cut)
```

## Generate report for each level of diamond cut
```{r, include=FALSE}
src <- lapply(cut.levels, function(cut) knit_expand(file = "template.Rmd"))
```

`r knit(text = unlist(src))`

和模板(template.Rmd):

```{r, results='asis', echo = FALSE}
cat("### {{cut}} cut")
```

```{r {{cut}}-cut, eval = FALSE}
with(subset(diamonds, cut == "{{cut}}"),
plot(carat, price, main = paste("{{cut}}", "cut"))
)

```

在将 template.Rmd 中的第二个 block 设置为 eval=FALSE 的情况下运行它会产生预期的输出 - 每个 block 的一系列 header 以及回显代码。但是,subset 调用中 cut.levels 字符串的替换值丢失了它们的引号,我预计,当 eval= FALSE block 选项已删除:

Quitting from lines 6-8 (test.Rmd) 
Quitting from lines 12-12 (test.Rmd)
Error in eval(expr, envir, enclos) : object 'Fair' not found
Calls: <Anonymous> ... with -> subset -> subset.data.frame -> eval -> eval

它现在正在寻找对象 Fair 而不是那些带有 cut == "Fair" 的记录。

感谢您的协助!

> sessionInfo()
R version 3.2.1 (2015-06-18)
Platform: x86_64-w64-mingw32/x64 (64-bit)
Running under: Windows 7 x64 (build 7601) Service Pack 1

locale:
[1] LC_COLLATE=English_United States.1252 LC_CTYPE=English_United States.1252
[3] LC_MONETARY=English_United States.1252 LC_NUMERIC=C
[5] LC_TIME=English_United States.1252

attached base packages:
[1] stats graphics grDevices utils datasets methods base

最佳答案

我看到 2 个问题。

首先,正如您所指出的,{{cut}} 是在没有引号的情况下展开的,因此您需要将标签括在引号中。其次,plot() 的右括号放错了地方。它应该通过以下编辑运行:

### {{cut}} cut

```{r {{cut}}-cut}
with(subset(diamonds, cut == "{{cut}}"),
plot(carat, price, main = paste("{{cut}}", "cut"))
)
```

关于r - 基于字符向量进行子集化时,knit_expand 失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32697720/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com