如何在 R 中将输出从 sub() 传输到 read.table()

How to pipe output from sub() to read.table() in R

我正在尝试阅读 csv from this website。每行以 \t 结尾,这导致 read.delim()read.table() 将数据行视为比 header 行多 1 列,这会导致问题。

我可以使用以下代码轻松删除行尾的 \t

file.set <- "data_source.txt"
temp <- file.set %>% 
    readLines() %>% 
    sub(" \t$", "", .) %>% 
    writeLines()

我想不通的是如何在不使用 writeLines() 写出文件的情况下将 sub() 命令的结果传送到 read.delim()。我试过以下代码:

temp <- file.set %>% 
    readLines() %>% 
    sub(" \t$", "", .) %>% 
    read.delim(quote = NULL)
#  Error in file(file, "rt") : invalid 'description' argument

temp <- file.set %>% 
    readLines() %>% 
    sub(" \t$", "", .) %>% 
    writeLines() %>% 
    read.delim(quote = NULL)
#  [prints info from file.set to console]
#  Error in read.table(file = file, header = header, sep = sep, quote = quote,  : 
#    'file' must be a character string or connection

问题很可能是我不明白如何正确使用连接(或者使用连接只是错误的方法)。我找到的关于在 R 中使用连接的教程主要是指从远程数据库获取数据,这让我觉得我做错了。

读入数据后,您实际上不需要将数据写出。您可以将其直接通过管道传递给 read.delimtext= 参数。例如

temp <- file.set %>% 
  readLines() %>% 
  sub(" \t$", "", .) %>% 
  read.delim(text = .)

我无法打开您使用的实际文件(该行对我不起作用),但通常只读入带有额外列的数据然后在导入后删除会更容易。我不清楚 "problems" 你最初阅读文件时的体验究竟是什么。