如何将数据帧复制到剪贴板,以便粘贴时的输出与从 RStudio 控制台手动复制时的输出相同?

问题描述 投票:0回答:3

我想将数据框复制到剪贴板,以便将其粘贴到电子邮件中。

我尝试了

clipr::write_clip
write.table
,但这些解决方案都无法呈现格式良好的输出(列的名称已移位)

当我从 RStudio 控制台复制时,它可以工作。

df <-  data.frame(Column1 = c(0.2222, 0.1), Column2 = c("Valeur3", "Valeur4"))
print(df)

  Column1 Column2
1  0.2222 Valeur3
2  0.1000 Valeur4
r rstudio clipboard
3个回答
0
投票

我猜您的问题是您在电子邮件客户端中使用默认字体。 大多数此类字体都是成比例的。

查看使用默认(比例)字体粘贴到文本处理器中的示例的屏幕截图:

对于代码、脚本和类似文本,有必要使用所谓的等宽字体,以节省符号宽度。当文本格式化为代码时,stackowerflow 使用此类字体:

  Column1 Column2
1  0.2222 Valeur3
2  0.1000 Valeur4

Stackowerflow 对纯文本使用比例字体:

第 1 列第 2 列

1 0.2222 瓦莱尔3

2 0.1000 瓦莱尔4

请参阅此处来自具有等宽字体集的同一文本处理器的屏幕截图:

与粘贴到同一窗口中的剪贴板内容完全相同。从 RStudio 控制台复制的文本是纯文本,因此在粘贴时,文本处理器会设置通常成比例的最后一个或默认文本(字母具有不同的宽度,具体取决于符号的光学密度)。您可以选择您喜欢的字体。例如,请参阅维基百科

的列表

0
投票

选项 1:使用 Excel/您的默认电子表格编辑器

要使用您的数据打开系统的默认电子表格查看器,您可以使用如下命令:

open_spreadsheet <- function(x) {
  file <- tempfile(fileext = ".csv")
  readr::write_excel_csv(x, file)
  browseURL(file)
  invisible()
}

# Test using `iris`:
open_spreadsheet(iris)

运行此命令后,您应该能够在复制/粘贴到电子邮件之前轻松应用您喜欢的任何样式。

或者,您可以手动打开电子表格编辑器,并在调用

clipr::write_clip()
后粘贴数据。如果您想使用 Google Sheets 之类的东西来应用样式,这可能会很方便。

选项 2:使用 {囊胚}

{blastula} 包可以轻松地从 R 生成和发送电子邮件,如果这是您一直需要做的事情,这可能更合适。如果您在电子邮件中包含数据,那么使用 R Markdown 创建电子邮件本身可能会更容易,但您可以轻松地完成一些基本工作: library(blastula) compose_email( body = md(glue::glue( "Hey, please see this data: {knitr::kable(iris, format = 'html')}" )) )

选项 3:使用自定义 HTML 样式

有很多用于使用 HTML 设计表格样式的软件包,其中许多提供的结果可以毫无问题地复制/粘贴到电子邮件中。这是一个使用优秀的

{gt}

包的示例: iris |> gt::gt() |> gt::tab_header("This is the data")



-1
投票

write.table(df, file="clipboard-16384", sep="\t", dec =",", col.names=TRUE, row.names = FALSE)

如果需要更好的演示,请粘贴到 Excel 中...

© www.soinside.com 2019 - 2024. All rights reserved.