我的问题类似于这个SO question,但我不想创建一个绘图,而是要计算代码块。我想知道是否有可能以编程方式生成标题,和根据各自的标题评估代码块?下面是我的尝试。
我有一个数据帧的list,我想要为每个list元素创建一个头并计算代码块。下面的示例就是使用nrow()计算每个数据帧的行数。
```{r data}数据(“虹膜”、“空气质量”、“汽车”)
my_list <-列表(虹膜,空气质量,地铁)
名称(My_list) <- c(“虹膜”、“空气质量”、“汽车”)
```{r headers, results = 'asis'}for (i in seq_along(my_list)) {
cat('#',name(My_list)I,'\n')
cat(‘’{r}‘,'\n')
cat('nrow(mylist[i])') #评估这里的任何其他代码
禁止酷刑委员会(“\n”)
cat(“”)
禁止酷刑委员会(“\n”)
}
任何洞察力都将不胜感激!
发布于 2018-09-20 01:19:20
这种行为是因为R无法在由所有mylist调用创建的新环境中找到您的cat对象。而且,由于mylist[[i]]是一个表达式,我们必须解析和计算它,才能得到最终的结果。
例如-
```{r headers, results = 'asis'}for (i in seq_along(my_list)) {
cat('#',name(My_list)I,'\n')
cat(‘’{r}‘,'\n')
cat(eval(解析(text=‘i’)
禁止酷刑委员会(“\n”)
cat(“”)
禁止酷刑委员会(“\n”)
}
以上代码将给出如下结果(这是我们需要的结果)-
# iris
```{r} 1
# airquality
```{r} 2
# mtcars
```{r} 3.
但是要用mylist实现这一点,我们需要确保mylist对象在新环境中,然后才能进行评估。此外,请注意,人们不鼓励使用parse(),因为它可能导致这样的行为。这里有更多信息- Assigning and removing objects in a loop: eval(parse(paste(
这个答案将适用于你的例子,但请考虑我刚才提到的内容以及在上述问题中的讨论-
```{r data}数据(“虹膜”、“空气质量”、“汽车”)
my_list <-列表(虹膜,空气质量,地铁)
名称(My_list) <- c(“虹膜”、“空气质量”、“汽车”)
```{r headers, results = 'asis'}for (i in seq_along(my_list)) {
cat('#',name(My_list)I,'\n')
cat(‘’{r}‘,'\n')
以某种方式在这里获取数据或任何其他对象
这适用于简单的示例,在实际代码块上使用之前请小心。
cat(解析(文本=粘贴(nrow(my_list[i])
禁止酷刑委员会(“\n”)
cat(“”)
禁止酷刑委员会(“\n”)
}
# iris
```{r} 150
# airquality
```{r} 153
# mtcars
```{r} 32
发布于 2018-09-20 03:51:05
这是我解决类似问题的一种方法。我在这里得到了提示,但找不到答案.
两份文件:一名家长,一名子女。将子文档看作可以多次调用的子例程,并将其输出保存(并连接到character向量out)。当我在这个循环中完成时,我使用内联`r code`块。
主要文件,“家长”,我猜:
---
output: md_document
---
```{r data}数据(“虹膜”、“空气质量”、“汽车”)
my_list <-列表(虹膜,空气质量,地铁)
名称(My_list) <- c(“虹膜”、“空气质量”、“汽车”)
```{r headers, echo = FALSE, include = FALSE, results = 'asis'}输出<- NULL
for (i in seq_along(my_list)) {
out <- c(out,knitr::knit_child(“out.out”))
}
`r paste(out, collapse="\n")`子文档,与上面称为somedoc-child.Rmd的目录相同,由父文档调用。它对环境的看法与父环境完全相同,因此my_list和i是完美的。
# `r names(my_list[i])`
```{r, results="asis"}nrow(my_list[i])
当我编织下来的时候,我得到:
data("iris","airquality","mtcars")
my_list <- list(iris,airquality,mtcars)
names(my_list) <- c("iris","airquality","mtcars")
iris
====
nrow(my_list[[i]])
\[1\] 150
airquality
==========
nrow(my_list[[i]])
\[1\] 153
mtcars
======
nrow(my_list[[i]])
\[1\] 32https://stackoverflow.com/questions/52414809
复制相似问题