我正在使用 R版本3.5.2 。
我想在kable
函数中评估字符串,但是我遇到了一些问题。通常,我可以使用get
函数通过一个for循环传递一个字符串,但是在kableExtra::add_header_above
函数中,我会遇到以下错误:
Error: unexpected '=' in:"print(kable(df4,"html", col.names = c("zero","one")) %>% add_header_above(c(get("string") ="
我尝试了多种技术,例如在kable函数之外创建一个字符串并调用它,在knit循环中使用分页符和print语句,还尝试了eval
函数。我还根据建议here
以下是可重现的示例:
```{r results="asis"}
library("knitr")
library("kableExtra")
df1 <- mtcars %>% dplyr::select(am,vs)
df1a <- df1 %>% mutate(type = "A")
df1b <- df1 %>% mutate(type = "B")
df1c <- df1 %>% mutate(type = "C")
df2 <- rbind(df1a,df1b,df1c)
vector <- as.vector(unique(df2$type))
for (variable in vector) {
df3 <- df2 %>% filter(type == (variable))
df4 <- table(df3$am,df3$vs)
print(kable(df4,"html", col.names = c("zero","one")) %>%
add_header_above(c(get("string") = 3)))
}
```
理想情况下,我希望表的标题具有来自type
列的字符串名称。以下是我希望它看起来的示例:
print(kable(df4,"html", col.names = c("zero","one")) %>%
add_header_above(c("A" = 3)))
我知道在使用this解决方案中的循环时,knitr
函数与常规R的处理方式有所不同,但我仍在努力正确地评估字符串。也许是因为该函数需要一个vecotr输入,所以它不是将其作为字符串转义吗?
答案 0 :(得分:1)
您必须将标头定义为向量。标头的名称应为向量的名称,向量的值应为标头将使用的列数。 代码中的循环应如下所示:
for (variable in vector) {
df3 <- df2 %>% filter(type == (variable))
df4 <- table(df3$am,df3$vs)
header_temp = 3
names(header_temp) = get("variable")
print(kable(df4,"html", col.names = c("zero","one")) %>%
add_header_above(header_temp))
}
因此,我首先在变量header_temp
中定义标题的列数,然后为其分配名称。