8

我想创建一个接口 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。

谢谢

4

2 回答 2

9

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

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

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

注意: 我假设这比任何东西都更方便 - 主要用于快速将小型数据集从 Excel 获取到 R 中。我不知道我是否会亲自使用"clipboard"65k 行范围内的文件作为你在你的问题中描述。

于 2013-11-05T10:39:29.763 回答
1

fread是绝对最酷的R功能,因为您可以直接使用系统命令,如clipboardor pbpaste

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 
于 2021-07-09T13:00:37.417 回答