将表格从 R 获取到 Libre Office Writer 的最佳方法?

Posted

技术标签:

【中文标题】将表格从 R 获取到 Libre Office Writer 的最佳方法?【英文标题】:Best ways of getting tables from R into Libre Office Writer? 【发布时间】:2015-06-13 03:04:29 【问题描述】:

目前,我的工作流程是在 R 中进行统计和数据重组,并使用 Libre Office (LO) Writer 编写文档。 R 中的分析结果通常是表格,我需要将它们放入 LO Writer。我还没有找到直接以简单的方式执行此操作的方法,所以我通常做的是:1)将表格放在 R 中,2)将表格导出为 .csv,3)在 LO Calc 中打开 .csv,4)使用特殊粘贴作为 RTF 从 LO Calc 复制到 LO writer。

保存到 .csv 时,我使用 write.csv(table_1, "table_1.csv", na = "") 来执行此操作。这导致了一个额外的步骤,因为 LO Calc 需要知道如何读取 .csv 文件。或者,可以install one of the packages 输出到 .ods 或 .xls(x)。

这样做的一个问题是,这经常会导致文件中的十进制数字很长,例如2.21931,而通常只想在文档中显示 2 或 3 位数字。对于这种烦恼,我找到了两种解决方案。

第一个是使用例如对 R 中的数字进行四舍五入。 round(table_1, 2) 然后使用上述命令保存。这样做的问题是,当将其导入 LO Calc 时,0.60 之类的数字将变为 0.6,失去一个(冗余)数字。这使得呈现有些不一致。可以将它们添加回文档中的表格中或使用 LO Calc 中的舍入函数。

第二种是使用Libre Office Calc中的舍入功能,但这需要一些额外的工作/更多工作。

最后,当重要的表格像这样进入 LO Writer 时,表格会有不可见的边框。必须为每个表手动添加这些。

在避免有效数字问题和额外点击的同时,将结果表从 R 获取到 LO Writer 的最佳方法是什么?

【问题讨论】:

也许是一些快捷方式:我使用(在 Windows 上)write.table(dat, 'clipboard', sep='\t', row.names=FALSE, header=TRUE) 并将其粘贴到我的电子表格中。这避免了保存和导入 CSV 的需要。至于有效数字,您是否尝试过dat[,num_columns] <- sapply(dat[,num_columns], format, digits=3)之类的东西? 使用剪贴板不是一个坏主意。我已经尝试过format(),但由于某种原因它将类型更改为字符。但是,我没有在sapply() 中尝试过。 如果不转换为字符串,则无法确保在舍入后显示有效数字。否则,您需要依靠 Calc 和/或 Writer 来处理有效数字。 更重要的是:在电子表格中,您通常可以控制每个单元格的符号位数,但只会影响数字的显示方式,无论是浮点数还是整数。在 R 中,您通常只能在全局级别上控制有效数字(除了一些小例外),这同样不会影响数据结构内部数字的精度;它只是一个显示配置。通常 CSV 和复制/粘贴元数据不包括特定于显示的参数。因此,如果您想在复制/粘贴中强制执行此操作,则必须通过字符串。 我同意@AaronKatch,sprintf 是一个很好的字符串格式化工具,尽管这可能是我的 C/C++ 培训开始的原因。我经常不在建议中首先列出它,因为我的看法是formatpaste 是许多R 程序员的首选(我不认为这是基于性能的偏好)。 【参考方案1】:

尝试使用sprintf() 等函数在R 中进行格式化。 这是我发现控制数字显示的最佳方式。 下面的 url 有很好的工作示例。

http://www.cookbook-r.com/Strings/Creating_strings_from_variables/

另外,考虑使用knitr 包来动态创建文档。

【讨论】:

【参考方案2】:

如果您想要一种完全自动化的方式来生成 LibreOffice 文档,标准的 R 做事方式是使用 knitr 编写文档,然后使用 Pandoc 将生成的文件转换为 ODT 格式。

(Pandoc 还不支持 AsciiDoc 作为输入格式,因此您只能在 markdown/LaTeX/html/textile/reStructuredText 中编写文档。)

【讨论】:

以上是关于将表格从 R 获取到 Libre Office Writer 的最佳方法?的主要内容,如果未能解决你的问题,请参考以下文章

[Libre|Open]Office 中当前文档的路径

Libre Office 电子表格 - 如何在列中的多个重复值中仅保留一个值?

插入 HTML Libre Office

打开/Libre Office 宏以滚动视图到选择

使用命令行使用 Libre Office 将 xls 转换为 dbf

Python3 - Docker部署Libre Office Online在线文件转换