【发布时间】:2018-07-12 16:24:36
【问题描述】:
这是上一个问题的扩展:Automating the generation of preformated text in Rmarkdown using R。这是任务:
你有一个存储在data.frame中的歌词集合,其列是:歌词(每行末尾有很多\n)、歌曲标题、歌曲专辑、音乐作者、词作者、年等...
现在您想使用markdown(或bookdown)和glue 包自动生成格式精美的这首诗集,它们应该会生成这样的html:
<h1> Album name </h1>
<h2> Song name </h2>
<blockquote>
<cite>
Music: author_music <br>
Words: author_words
</cite>
<pre>
lyrics-line1
...
lyrics-lineN
</pre>
</blockquote>
挑战在于,如果您使用来自Automating the generation of preformated text in Rmarkdown using R 的代码,它会将所有歌词打印为一长行: 歌词行\n...\n歌词行N
换句话说,有没有办法逐行打印歌词行(line\n ... \nlyrics-lineN),而不是一个连接的行?
此代码可用于获取要播放的歌词数据:
library(data.table); library(magrittr); library(knitr); library(stringr);library(dplyr)
dt <- fread("https://s3.amazonaws.com/assets.datacamp.com/blog_assets/prince_raw_data.csv")
dt <- dt[301:303,2:6] #take three songs only
dt %>% names
dt %>% kable() # just to view the lyrics in your console.
注意:kable() 函数不会将 \n 替换为 <br>,我们希望这样做。
所以如果你用它来生成你的诗歌的 html,你会遇到同样的问题 - 而不是一个有很多行的诗句,你会得到一个很长的连接行。
PS。规避该问题的一种方法是将原始文本字符串拆分为许多单行字符串(例如,使用str_split(dt$text, '\n'),然后使用for 循环分别打印每一行。但应该有更好的打印诗句的方法,我希望。
【问题讨论】:
标签: r markdown r-markdown knitr bookdown