【问题标题】:R: read contents of text file as a query?R:读取文本文件的内容作为查询?
【发布时间】:2010-08-27 00:26:23
【问题描述】:

使用 R,我只想将文件的内容读入一个变量,例如:

query <- read_file_contents('biglongquery.sql')

为了避免在 R 脚本本身中放置大而长的查询。我确实想读取 CSV 等数据(例如 read.tables)等 - 只是原始文本。

【问题讨论】:

  • 我认为scan 可以做到这一点,但我不确定(所以不发布它作为答案)
  • 你有什么理由不想看到你biglongquery?然后您可以使用RODBC 包连接到您的SQL 数据库并调用select * from myShortView 或任何合适的方法。
  • 我同意Chase,视图可以像表格一样读取,我认为R甚至无法区分。
  • @Chase 假设一个人有权在数据库上创建视图。并且OP方法不改变数据库结构(它是“只读的”)。
  • @Marek - 正式注明。我想我倾向于不时将我的系统管理员权限视为理所当然,并且可以在任何我愚蠢到可以连接到的数据库上使用 Little Bobby Tables:xkcd.com/327

标签: r


【解决方案1】:

Scan 完成了这项工作,但用于此目的的函数实际上是 readLines()。

query <- readLines("biglongquery.sql")

这会给你一个带有线条的向量。要将它们组合成一个变量,您可以使用粘贴功能,例如

one.variable <- paste(query,collapse="\n")

【讨论】:

  • 如果一个人经常使用它,那么readQuery&lt;-function(file) paste(readLines(file), collapse="\n") 可能会有用。
  • 除了第一次拆分和重新组合文件中的行时所有的内存工作外,这种方法的缺点是任何尾随的换行符都会丢失。此外,您已将行终止符标准化为 \n。
  • @OliverBock 没错。据我所知,没有函数可以读取整个文件的内容并将其存储为单个值。 R 通常使用 \n 作为行终止符,但你可以使用任何你想要的。
【解决方案2】:
x <- paste(scan("foo.sql",what="",sep="\n",blank.lines.skip=FALSE),collapse="\n")

【讨论】:

    【解决方案3】:

    另一种方法是创建带有查询定义的 .R 脚本

    # content of biglongquery.R
    query <- "
    SELECT
        very_long_list_of_fields
    FROM ...
    "
    

    然后在主脚本中使用它

    source("biglongquery.R")
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-05-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-02-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多