R data.table 从剪贴板读取

Posted

技术标签:

【中文标题】R data.table 从剪贴板读取【英文标题】:R data.table fread from clipboard 【发布时间】:2013-11-16 03:31:06 【问题描述】:

我想创建一个接口 excel-R::data.table。 我想问一下如何在剪贴板中使用 fread 函数。 以下代码运行良好,但我更喜欢使用 fread 而不是 read.table(在 excel 文件中复制一些表并在 R 中运行上述命令):

data.table(read.table("clipboard",sep="\t",header=TRUE))

我尝试声明与剪贴板的连接,但目前无法正常工作。同样如 fread 函数文档中所述,它将发生变化,并且可能会弃用某些东西,因此拥有一个不会在不久的将来弃用的解决方案可能会很好。 剪贴板/fread 有任何限制吗?比如 65000 行,或者其他一些内存限制?

我还想建议扩展 data.table::fread 函数以默认接受“剪贴板”连接,因为它目前适用于 read.table。

谢谢

【问题讨论】:

您可以在此处添加功能请求 - r-forge.r-project.org/projects/datatable 【参考方案1】:

fread 似乎没有这个功能,但是对于有限的使用,你可以很容易地为它编写自己的包装器。以下内容可能会帮助您入门:

freadClip <- function(...) 
  X <- tempfile()
  writeLines(readLines("clipboard"), X)
  fread(X, ...)

用法只是从 Excel 工作表中复制单元格,切换回 R,然后输入 freadClip()

注意: 我假设这更像是一个方便的功能——主要是为了快速将一个小型数据集从 Excel 导入 R。我不知道我是否正如您在问题中描述的那样,将亲自将"clipboard" 用于 65k 行范围内的文件。

【讨论】:

视情况而定。如果你在说OS X,你有pbpaste 命令和fread 直接接受系统命令作为character 参数。真是太神奇了!例如fread( "pbpaste" ),在 Linux 上我认为它被称为 xclip。 Windows 似乎没有内置此功能(显然)。 @SimonO101,我还没有在家里的系统上测试过。我建议的这种方法实际上效率不高,但很快就想到了。 我已经测试了例如fread( "cut -f1 -d, C:/Data/text.txt" ) 来读取逗号分隔文本文件的第一列(BenBolker 的解决方案)并且效果很好。【参考方案2】:

fread 绝对是最酷的R 函数,因为您可以直接使用clipboardpbpaste 等系统命令。

dt_clip <- function(...)
  # returns which operating system being used
  os_type <- .Platform$OS.type
  
  # allows the function to be agnostic to the OS. 
  switch(os_type,
         unix = data.table::fread(cmd = 'pbpaste', ...),
         windows = data.table::fread(cmd = 'clipboard', ...)
         )


这大大加快了速度。

# using a 1e6x2 data table from excel
> system.time( freadClip())
   user  system elapsed 
  2.156   0.151   2.509 

> system.time( dt_clip())
   user  system elapsed 
  0.141   0.060   0.221 

【讨论】:

以上是关于R data.table 从剪贴板读取的主要内容,如果未能解决你的问题,请参考以下文章

如何用R语言只读取一部分数据

Flutter 无法从剪贴板读取

Pandas 从剪贴板读取带有日期时间列的 DataFrame

网页是如何实现从剪贴板从读取图片并上传到server的

如何在跨浏览器中读取剪贴板数据?

在 Blender (python) 中从 Windows 剪贴板中读取二进制数据