我对r和rmarkdown比较新,所以如果这是一个愚蠢的问题,我会提前道歉。这是对更大数据集的简单复制。
我在数据框中有三列:
df <- data.frame( c(a, b), c(c, d), c(e, NA))
names(df) <- c("X", "Y", "Z")
我想在rmarkdown文件中显示它们,如下所示:
我喜欢b。
这是c
这是e
这是d
我写了一个包含
的函数X <- 0
for (i in 1:nrow(df)) {
X[i] <- df$X[[i]] }
Y <- 0
for (i in 1:nrow(df)) {
Y[i] <- df$Y[[i]] }
X <- 0
for (i in 1:nrow(df)) {
Z[i] <- df$Z[[i]] }
在markdown文件中(我正在努力争取的位)
I like `r X` ### This is fine
``` {r}
for (i in 1:nrow(df)) {
Y[i]
Z[i] } ### Doesn't work and I want to include text i.e. This is
```
我想做一些循环,所以它打印Y列Y的行1中的元素,然后是下一行等等,并跳过ifNA
任何帮助都将受到重视! :)
答案 0 :(得分:-1)
首先,我会在你的第一个循环中给你一些提示。如果要将data.frame列传递给向量,可以对其进行向量化。我建议你check this later。因此,而不是:
X <- 0
for (i in 1:nrow(df)) {
X[i] <- df$X[[i]] }
尝试做:
X <- vector("numeric", nrow(df)) #suggestion to create a empty numerical vector
X <- as.numeric(df$X)
回答您的主要问题,您可以命名代码块以保持组织有序。如果您只需要输出而不是打印的代码,请使用eval=FALSE
。现在,您有了向量,可以使用@jason建议:
I like `r X`
```{r code_chunk1, eval=FALSE}
paste0("This is ", X)
paste0("This is ", Y)
paste0("This is ", paste(Z,collapse = " ")) # if you want them all in the same line
}
```
避免使用操作员,它会产生意外结果并在您不注意的情况下产生问题! Visit this.
答案 1 :(得分:-1)
没有必要使用循环。但是,df
的元素需要重新排列以按行打印。
下面的rmarkdown文件再现了预期的结果:
---
title: Loop in rmarkdown
output: html_document
---
```{r, echo=FALSE}
df <- data.frame( c("a", "b"), c("c", "d"), c("e", NA))
names(df) <- c("X", "Y", "Z")
```
I like `r df$X`
```{r, echo=FALSE, warning=FALSE}
library(magrittr) # use piping to improve readability
df[, 2:3] %>% # treat columns like a matrix
t() %>% # change from row first to column first order
as.vector() %>% # flatten into vector
na.omit() %>% # drop NAs
paste("This is", .) %>% # Prepend text
knitr::kable(col.names = NULL) # print as table
```
输出为
请注意,knitr::kable(col.names = NULL)
用于创建内联文本,即文本输出未包装在逐字记录元素中。
或者,可以使用块选项results='asis'
:
```{r, echo=FALSE, warning=FALSE, results='asis'}
library(magrittr) # use piping to improve readability
df[, 2:3] %>% # treat columns like a matrix
t() %>% # change from row first to column first order
as.vector() %>% # flatten into vector
na.omit() %>% # drop NAs
paste("This is", ., collapse = " \n") %>% # Prepend text and collapse into one string
cat() # use cat() instead of print()
```
请注意,\n
之前的2个空格必须用于指示rmarkdown中的换行符。