这是前一个问题的延伸:用R实现预格式化文本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>挑战在于,如果您使用来自用R实现预格式化文本R的自动生成的代码,它将把所有歌词打印成一行:歌词-行\n歌词-亚麻布
换句话说,是否有一种方法可以逐行打印歌词行(行\n.\n歌词-亚麻布),而不是一条连在一起的行?
这是代码,可以用来获取歌词数据来播放:
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()函数不能用<br>代替\n,我们希望这样做。
所以,如果你用它来生成你的诗歌的html,你就会遇到同样的问题--而不是一首多行的诗,你会得到一个长的连列行。
PS。解决这一问题的一种方法是将原始文本字符串拆分为多个一行字符串(例如。通过使用str_split(dt$text, '\n'),然后使用for循环分别打印每一行。但我希望应该有一个更好的方法来印刷诗句。
发布于 2018-07-13 05:47:33
换句话说,是否有一种方法可以逐行打印歌词行(行\n.\n歌词-亚麻布),而不是一条连在一起的行?
它是连接的,因为这是一个标记规则,它需要在每一行的末尾有两个空格。
我的解决方案是在您的<pre> <\pre>周围添加原始html标记dt$text,以保护它们不被标记语法解析:
(不过,我注意到<pre>会将文本呈现为代码块,呃)
```{r echo=FALSE, results='asis'}(i in 1:nrow(dt)){
相册=dt$白蛋白
宋=dt$ song i
歌词= dt$texti
猫(胶水::胶水(#{相册}\n\n“))
猫(胶水::胶水(“## {song}\n\n"))
猫(胶水::胶水({歌词}))
}
或者,将\n替换为\n(在\n之前插入两个空格),而不使用glue
```{r echo=FALSE, results='asis'}dt$text <- gsub("\n",“n”,dt$text)
(i in 1:nrow(dt)){
cat(paste0("# ",dt$白蛋白,“\n”)
cat(paste0("## ",dt$songi,“n\n”))
cat(paste0("> ",dt$texti))
禁止酷刑委员会(“\n”)
}
https://stackoverflow.com/questions/51310488
复制相似问题