为什么在使用 RStudio 编织按钮下拉菜单时 YAML 中的输出顺序会发生变化?
Why does the order of outputs change in YAML when the RStudio knit button drop down is used?
RStudio 将根据 selectknit 下拉按钮中最后输入的选项重新排序 YAML 中的输出列表。
---
title: "Untitled"
output:
html_document: default
word_document: default
---
上面的 YAML header 提供了将 RMarkdown 编译为 word 或 html 的选项。它将在顶部为您提供主要选项,在本例中为 html_document
.
当下拉菜单用于 select 备用输出时,例如word_document
,输出顺序会这样变化:
---
title: "Untitled"
output:
word_document: default
html_document: default
---
我假设(根据 Jonathan 和 Kevin 对上一个问题的有益评论),这是由于 RStudio 读取 RMarkdown 并提供上下文按钮的方式,但是,我很好奇这是否 re-ordering 可以是 'turned off' 吗?
这样做的动机是版本控制。这会更改文本文档,它注册为修改并因此强制提交或还原。
行的顺序变化肯定是版本控制的问题,但根据 YAML 规范,映射中的键是无序的,加载-转储不能保证给出相同的值
一些库通过键的排序值转储映射,但这不是必需的,并且除了所有键都属于同一类型并且可以排序的映射之外没有任何意义。
假设解析器符合标准,那么您可以从两个示例中加载的 YAML 完全相同。如果键值的顺序很重要,正确的方法是制作单个键值映射的列表(破折号可以,但不必缩进):
title: "Untitled"
output:
- html_document: default
- word_document: default
并可选择放入标签 !!omap
以确保这是有序地图:
title: "Untitled"
output: !!omap
- html_document: default
- word_document: default
RStudio 确实使用映射中的行顺序当然是可能的(我自己在我的ruamel.yaml Python包中这样做允许在没有密钥重新排序的情况下进行往返)。但更正确的方法是使用 !!omap
,或以其他方式指示所选键或键的顺序。
这是一个非常烦人的问题。
我主要使用nb.html,但有时我想编织一个PDF。
我一编织PDF:
- 我必须手动重新排序输出,否则 nb.html 可能无法再保存。
- 我必须恢复我在输出字段中的任何评论,因为它们都已自动删除。
到目前为止,我最好的解决方案是在正下方的块中保留 YAML header 的干净副本。
这很丑陋,但我尝试了更精细的解决方案,例如 r 表达式。它们失败了,因为 RStudio 检查 YAML header 中的文字 "html_notebook" 字段(参见 In r studio, how does the IDE treat notebooks with the 'preview' button),因此没有干净的解决方法
RStudio 将根据 selectknit 下拉按钮中最后输入的选项重新排序 YAML 中的输出列表。
---
title: "Untitled"
output:
html_document: default
word_document: default
---
上面的 YAML header 提供了将 RMarkdown 编译为 word 或 html 的选项。它将在顶部为您提供主要选项,在本例中为 html_document
.
当下拉菜单用于 select 备用输出时,例如word_document
,输出顺序会这样变化:
---
title: "Untitled"
output:
word_document: default
html_document: default
---
我假设(根据 Jonathan 和 Kevin 对上一个问题的有益评论),这是由于 RStudio 读取 RMarkdown 并提供上下文按钮的方式,但是,我很好奇这是否 re-ordering 可以是 'turned off' 吗?
这样做的动机是版本控制。这会更改文本文档,它注册为修改并因此强制提交或还原。
行的顺序变化肯定是版本控制的问题,但根据 YAML 规范,映射中的键是无序的,加载-转储不能保证给出相同的值
一些库通过键的排序值转储映射,但这不是必需的,并且除了所有键都属于同一类型并且可以排序的映射之外没有任何意义。
假设解析器符合标准,那么您可以从两个示例中加载的 YAML 完全相同。如果键值的顺序很重要,正确的方法是制作单个键值映射的列表(破折号可以,但不必缩进):
title: "Untitled"
output:
- html_document: default
- word_document: default
并可选择放入标签 !!omap
以确保这是有序地图:
title: "Untitled"
output: !!omap
- html_document: default
- word_document: default
RStudio 确实使用映射中的行顺序当然是可能的(我自己在我的ruamel.yaml Python包中这样做允许在没有密钥重新排序的情况下进行往返)。但更正确的方法是使用 !!omap
,或以其他方式指示所选键或键的顺序。
这是一个非常烦人的问题。
我主要使用nb.html,但有时我想编织一个PDF。
我一编织PDF:
- 我必须手动重新排序输出,否则 nb.html 可能无法再保存。
- 我必须恢复我在输出字段中的任何评论,因为它们都已自动删除。
到目前为止,我最好的解决方案是在正下方的块中保留 YAML header 的干净副本。
这很丑陋,但我尝试了更精细的解决方案,例如 r 表达式。它们失败了,因为 RStudio 检查 YAML header 中的文字 "html_notebook" 字段(参见 In r studio, how does the IDE treat notebooks with the 'preview' button),因此没有干净的解决方法