Rでforループ内にkable文を入れたら、表を出力してくれず困ったときの対処


ただの小ネタで備忘録です。

困ったこと

次のような文をR Markdownで書いたときに、kableの表が表示されなくて困ったことがありました。

#```{r}
files <- list.files(path, pattern=".csv")
for (csv.file in list.file){
  df <- read.csv(csv.file)
  knitr::kable(summary(df)) #問題の箇所
}
#```

(RMarkdownのchunk区切りをそのまま表示できないので、苦し紛れにコメントしてます。)
これを実行してもkableの表は出力されません。forの外なら出力されるのに。。

解決方法

stack overflowにドンピシャの解決方法が載っておりがあり、これにならって書き直して実行したら無事に出力されました。```{r results="asis"}を指定して、kableの箇所はprintで出力されるようにする必要がありましたという話。

#```{r results = "asis"}
files <- list.files(path, pattern=".csv")
for (csv.file in list.file){
  df <- read.csv(csv.file)
  print(knitr::kable(summary(df))) #問題の箇所
  cat("\n")
}
#```

終わりに

まあ、Rではfor文はあまり好まれませんし、他のやり方をした方がいいのかなとは思います。

参考文献

Stack overflow - R: why kable doesn't print inside a for loop?