R data.table fread从剪贴板读取数据

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函数,以默认接受“clipboard”连接,就像read.table当前正在工作一样。
谢谢

您可以在此处添加功能请求 - https://r-forge.r-project.org/projects/datatable/ - eddi
2个回答

9

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

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

使用时只需复制Excel表格中的单元格,切换回R并输入freadClip()

注意: 我假设这更多是一个方便函数,主要用于将小型数据集快速从Excel导入到R。但我不确定是否会像您在问题中描述的那样,在65k行范围内使用"clipboard"


2
这要看情况。如果你在 OS X 上,你可以使用 pbpaste 命令,而且 fread 直接将系统命令作为 character 参数接受。这真是太神奇了!例如:fread( "pbpaste" )。在 Linux 上,我想它被称为 xclip。显然,Windows 没有内置此功能。 - Simon O'Hanlon
@SimonO101,我还没有在家里的系统上测试过这个。我建议的这种方法实际上并不是非常高效,但这只是我很快想到的办法。 - A5C1D2H2I1M1N2O1R2T1
我已经测试了例如 fread( "cut -f1 -d, C:/Data/text.txt" ) 以读取逗号分隔的文本文件的第一列(BenBolker的解决方案),它运行良好。 - Simon O'Hanlon

1

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 

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接