使用 dplyr 进行括号转义的表名称

2024-06-28

我正在以编程方式获取一堆数据集,其中许多数据集都有以数字开头的愚蠢名称,并且其中包含特殊字符,例如减号。因为没有一个数据集特别大,而且我希望 R 能够对数据类型做出最好的猜测,所以我使用 dplyr 将这些表转储到 SQLite 中。

我使用方括号来逃避可怕的表名称,但这似乎不起作用。例如:

data(iris)
foo.db <- src_sqlite("foo.sqlite3", create = TRUE)
copy_to(foo.db, df=iris, name="[14m3-n4m3]")

这会导致错误消息:

Error in sqliteSendQuery(conn, statement, bind.data) : error in statement: no such table: 14m3-n4m3

如果我选择一个合理的名称,这就会起作用。但由于种种原因,我很想保留这些繁琐的名字。我还可以直接从 sqlite 创建这样一个名字不好的表:

sqlite> create table [14m3-n4m3](foo,bar,baz);
sqlite> .tables
14m3-n4m3

在没有深入研究的情况下,这看起来 dplyr 正在以某种我无法弄清楚的方式处理方括号。我怀疑这是一个错误,但我想先检查一下以确保我没有遗漏任何东西。

编辑:我忘了提及我只是将 janky 名称直接传递给 dplyr 的情况。错误如下:

library(dplyr)

data(iris)
foo.db <- src_sqlite("foo.sqlite3", create = TRUE)
copy_to(foo.db, df=iris, name="14M3-N4M3")

Error in sqliteSendQuery(conn, statement, bind.data) : 
  error in statement: unrecognized token: "14M3"

这是 dplyr 中的一个错误。它仍然存在于当前的 github master 中。正如 @hadley 所指出的,他试图在 dplyr 中转义表名之类的内容来防止此问题。您当前遇到的问题是由于两个函数中缺乏转义引起的。当提供未转义的表名时,表创建工作正常(并且通过dplyr::db_create_table)。但是,向表中插入数据是使用DBI::dbWriteTable它不支持奇数表名。如果向此函数提供的表名称已转义,则无法在表列表中找到它(您报告的第一个错误)。如果提供转义,则执行插入的 SQL 在语法上无效。

当表格更新时,第二个问题就出现了。获取字段名称的代码(这次实际上在 dplyr 中)再次无法转义表名称,因为它使用paste0而不是build_sql.

我已修复这两个错误dplyr 的一个分支 https://github.com/NikNakk/dplyr/tree/sqlite-escape。我还向@hadley 提出了拉取请求,并就该问题做了说明https://github.com/hadley/dplyr/issues/926 https://github.com/hadley/dplyr/issues/926。同时,如果您愿意,您可以使用devtools::install_github("NikNakk/dplyr", ref = "sqlite-escape")然后修复后恢复到主版本。

顺便说一句,在 SQL 中转义表名(和其他标识符)的正确 SQL-99 方法是使用双引号(请参阅SQL标准转义列名? https://stackoverflow.com/questions/2901453/sql-standard-to-escape-column-names)。 MS Access 使用方括号,而 MySQL 默认使用反引号。根据标准,dplyr 使用双引号。

最后,@RichardScriven 的提案不会普遍适用。例如,select是 R 中完全有效的名称,但在 SQL 中不是语法上有效的表名称。对于其他保留字也是如此。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 dplyr 进行括号转义的表名称 的相关文章

  • 从数据/系数创建 lm 对象

    有谁知道可以在给定数据集和系数的情况下创建 lm 对象的函数 我对此很感兴趣 因为我开始使用贝叶斯模型平均 BMA 并且我希望能够根据 bicreg 的结果创建 lm 对象 我想访问所有不错的通用 lm 函数 例如诊断绘图 预测 cv lm
  • 如何在Android中访问Sqlite数据库?

    我可以在模拟器中使用 adb shell 命令访问我的 sqlite 数据库 但无法对我的 HTC Desire 手机执行相同操作 它会抛出一些权限被拒绝的消息 是否有可能访问这些数据库以进行调试 任何想法 提前致谢 您还可以在命令提示符
  • 从谷歌街道地址中提取城市和州信息

    我有一个数据集 其中包含不同点位置的纬度 经度信息 我想知道与每个点关联的城市和州 按照此example https stackoverflow com questions 22911642 applying revgeocode to a
  • 在子目录中构建共享库

    我正在尝试构建一个使用一些 C 代码的 R 包 我有一个编译为可执行文件的 C 库 可以从命令行调用 有一个与之关联的 Makefile 我正在尝试获取信息here http cran r project org doc manuals R
  • 为什么 NaN^0 == 1

    受到早期高尔夫代码的提示 为什么会 gt NaN 0 1 1 这非常有道理NA 0为 1 因为NA缺少数据 并且any数字提高到 0 将得到 1 包括 Inf and Inf 然而NaN应该代表非数字 那么为什么会这样呢 当帮助页面出现时
  • 在 R 中提取栅格的最快方法(提高我的可重现代码的时间)

    我想知道我是否已最大化提取栅格中某个点周围缓冲区域平均值的速度 本地的性能可以进一步提高吗 I use parallel mclapply已经 我知道我可以通过在集群上设置和运行它来获得进一步的收益 使用集群或获得更多的CPU不是我正在寻找
  • 如何在其他脚本中包含(源)R 脚本

    我创建了一个实用程序 R 脚本 util R 我想从项目中的其他脚本中使用它 确保此脚本定义的函数可在我的其他脚本中运行的正确方法是什么 我正在寻找类似的东西require函数 仅在尚未加载的情况下加载包 我不想打电话source util
  • Shiny:合并 DT::datatable 中的单元格

    我想以闪亮的方式合并 DT datatable 列中的几行 可以这样做吗 目前我能够输出如下所示 但理想情况下 我想合并行并希望输出如下所示的内容 是否可以在 DT datatable 中合并这样的行 在以下人员的帮助下这是可能的数据表行组
  • 何时关闭 Android 上的数据库连接?每次操作完成后或应用程序退出后

    我有一个 Android 应用程序 经常访问本地 sqlite3 数据库 出于性能考虑 所以我始终保持连接打开 但我的一位朋友建议我在每次操作时打开 关闭连接 1 你们对这两种方法有何看法 缺点 优点 2 我做了一些测试 发现数据库连接没有
  • 在 RStudio 中自动格式化 R 代码

    RStudio 中是否有自动格式化代码的可能性 I found this https stackoverflow com questions 3017877 tool to auto format r code 但未与RStudio连接 还
  • 像 SQLite 一样区分大小写和不区分大小写

    在 SQLite 中 可以使用以下命令更改 LIKE 区分大小写的行为 PRAGMA case sensitive like ON PRAGMA case sensitive like OFF 然而 在我的情况下 我想执行一个查询 其中一部
  • 如何从 R 中的列表列表中提取元素?

    我有一堆列表 其中包含列表 广义线性模型输出 我想编写一个函数 该函数将从每个列表中提取多个元素 然后将结果组合到数据框中 我想提取modelset 1 likelihood modelset 1 fixef modelset 2 like
  • 从数据框中提取具有最高值和最低值的行

    我对 R 还很陌生 我主要用它来可视化统计数据ggplot2图书馆 现在我遇到了数据准备的问题 我需要编写一个函数 该函数将从数据框中删除指定列中具有最高和最低值的一些数字 2 5 或 10 行 并将它们放入另一个数据框中 并对两个因素的每
  • int NA 的内部表示[重复]

    这个问题在这里已经有答案了 这是关于 R 内部结构的问题 R 中如何表示整数 NA 值 与浮点不同 没有神奇的位序列来表示 NaN Create big array newer versions of R won t allocate me
  • 我收到类似 Error in if (file.access(phantompath, 1) < 0) { 的错误:当我使用 Phantomjs(p​​ort = 4567l) 时,参数的长度为零

    我的代码是 library RSelenium library wdman pDrv lt phantomjs port 4567L 以下是运行上述代码后出现的错误 checking phantomjs versions BEGIN PRE
  • 在 R 中将数组转换为矩阵

    我有一个数组 其中包括名为 comp 的项目 是 否 的两个熟练度变量 theta0 theta1 这需要转换为一个矩阵 有什么方法可以转换像底部那样的矩阵吗 我的数组如下所示 gt priCPT i6 comp Yes theta1 th
  • tmap 仅在 sf 几何列中绘制第一个多边形

    tmap 仅绘制 sf 几何列中的第一个多边形 但是plot 得到他们全部 一些 github 问题tmap https github com mtennekes tmap issues 360 and leaflet https gith
  • 基于 R 中多个现有列的计算的新列

    R df orginal 中的原始数据框 AB CD EF GH A 0 12 M A 0 13 F A 0 14 F A 1 16 M A 1 17 F A 1 18 M A 1 18 M A 2 0 78 M A 2 0 12 M A
  • 如何将 unicode 符号转换为 ggplot 的因子水平?

    我想在 ggplot 图例中获取一个符号 而不在比例中指定 我要这个 df lt data frame a 1 5 b factor 1 5 labels c 1 4 u2265 5 c 10 14 ggplot df aes a c co
  • GGplot为点添加数据标签

    如何使用 ggplot 将数据标签添加到点 我有一个名为 stacked 的堆叠数据框 gt head stacked time value variable 1 100 152 2211 gg 2 110 146 3304 gg 3 11

随机推荐

  • Cakephp cron 作业调用控制器的操作

    几个月前我开始使用 CakePHP 1 2 为公司的应用程序添加一些小功能 但我对它不太熟悉 我们先在开发服务器上进行本地测试 然后再合并到生产服务器 我希望每小时调用一个控制器操作 通过我的研究 我认为这是最好的方法 即 cron 作业
  • Win32: BitTest, BitTestAndComplement, ... <- 如何禁用这个垃圾?

    在 VS2008 SP1 安装中 WinNT h 包含以下几行 define BitTest bittest define BitTestAndComplement bittestandcomplement define BitTestAn
  • 取消设置多维数组中的行

    我有这个数组 output 如下所示 Array 0 gt Array 0 gt 1a 1 gt 1b 2 gt 1c 1 gt Array 0 gt 2a 1 gt 2b 2 gt 2c 2 gt Array 0 gt 3a 1 gt 3
  • 如何判断文件夹是否存在并且可写?

    我想要func FolderExists path string bool这将告诉文件夹是否存在并且可写 我已经到了这里 func FolderExists path string bool info err os Stat path re
  • 如何在 django 运行时添加动态字段

    我必须在运行时在 django 应用程序中添加动态字段 但我不知道如何在运行时添加新字段的正确方法 我想添加将生成动态字段并更新数据库的代码 我正在使用 postgresql 数据库 如果有人可以的话请帮忙 我的 model py 就像这样
  • 如何在不访问源代码的情况下调试 Java 应用程序?

    我需要调试一个没有源代码的 Java 应用程序 它在 Jetty 服务器上本地运行 使用JD GUI反编译效果很好 通过套接字连接或共享内存附加 JDB 也可以正常工作 我失败的地方是将各个部分组合在一起 我主要尝试了Eclipse的JD
  • 无法连接 AWS - RDS 数据库:SQL Server 2012 Express

    我是 AWS 世界的新手 我在访问 RDS US East 1a 上的 Microsoft SQL Server 2012 Express 11 00 5058 实例时遇到问题 当我创建数据库实例时 我能够访问它 创建一些表 传输数据等 一
  • 如何创建其中包含代理对的字符串?

    I saw 这个帖子 http blogs msmvps com jonskeet 2009 11 02 omg ponies aka humanity epic fail 在 Jon Skeet 的博客上 他谈论了字符串反转 我想尝试他向
  • 通用 Windows 平台中的 System.Xml.XPath

    根据 MSDN System Xml XPath 中的扩展类应该可用于通用 Windows 平台 Windows 10 https msdn microsoft com en us library system xml xpath exte
  • 在数据库中,键和索引有什么区别?

    例如 在 SQL Server 中 如果我有一个设置为 唯一 的索引 那么它与键有何不同 我如何知道何时要使用键还是索引字段 具有唯一值的字段本质上是一个键 但是 键用于唯一标识表中的行 而索引用于对表中的行进行排序或分组 密钥一旦初始设置
  • 在react中将表单数据传递给父类

    我有以下反应课程 var FormBox React createClass render function return h1 Forms h1
  • Netbeans-PHPUnit“未执行测试”错误

    我对任何类型的测试都是新手 我刚刚使用它安装了 pear 和 PHPUnitdoc http kubyshkin ru posts phpunit on mac os x snow leopard 10 6 html 我使用netbeans
  • RegEX 匹配方括号之外的所有内容

    我正在使用 WP 编辑器 我想创建一个 RegEX 模式来匹配方括号之外的所有内容 如下所示 foo Some selected text here foo More selected text here 并替换为 foo text box
  • 如何使用 php 获取 xml 节点的名为 xlink:href 的属性的值

    我就是做不到 不知道乳清 如何使用 php ini 获取 xml 节点的名为 xlink href 的属性的值 请有人轻轻推我一下 我是 PHP 新手 这是 XML 文档
  • exsl:xsl:if 块中的文档

    这是我的用例的简化版本 1 我有一个转换xsl文件 如下
  • 字段永远不会被分配,并且始终具有默认值 0

    我的代码中出现以下错误 我不知道为什么 警告 SummaryForm m difficulty is never assigned to and will always have its default value 0 Code publi
  • 重新查询时如何避免转到第一条记录?

    在 Access 2010 中制作一个表单 我试图制作一个移动到下一条记录 如果在末尾则为第一个记录 的按钮 但因为我想考虑其他用户对已发生的数据集的更新与此同时 我在转到下一条记录之前重新查询表单 我正在使用以下代码 改编自这个帖子 ht
  • html:
      列表样式背景色

    我想创建这个 http www kephost com images 2015 07 15 ol color picture png http www kephost com images 2015 07 15 ol color pictu
  • 在 Blazor SPA 上嵌入 Leaflet 地图

    如何在 Blazor SPA 上嵌入 Leaflet 地图 使用 JSInterop 应定义哪些对象以及如何将表示在地图上单击的位置的数据从 JavaScript 传递到 Blazor 注意 下面的示例代码是在独立的 WebAssembly
  • 使用 dplyr 进行括号转义的表名称

    我正在以编程方式获取一堆数据集 其中许多数据集都有以数字开头的愚蠢名称 并且其中包含特殊字符 例如减号 因为没有一个数据集特别大 而且我希望 R 能够对数据类型做出最好的猜测 所以我使用 dplyr 将这些表转储到 SQLite 中 我使用