【问题标题】:Lintr - is there a way to suppress capitalised data frame column name warnings?Lintr - 有没有办法抑制大写的数据框列名警告?
【发布时间】:2018-11-02 01:22:16
【问题描述】:

我一直在编写一个 R 包并使用 lintr 对其进行风格整理。

我经常看到的一个问题是我的 data.frame 列是从 CSV 命名的并且是大写的,例如MyVariableName。这不在我的控制范围内,输出的数据需要遵循相同的样式。因此,我不想在导入时重命名它们,因为在从输入数据中跟踪代码时会导致混淆。

我正在使用tidyverse 和 NSE。我也倾向于在代码中使用大量准引用的东西(我正在从引用的构建块构建分析,即定义包含以下内容的列表:

rlang::quo(MyFirstVar + MySecondVar) 

我尝试使用 .data$ 来确定它们的范围,但仍然收到警告:

rlang::quo(.data$MyFirstVar + .data$MySecondVar) 

我发现 dplyr 选择命令可以将列名引用为字符串 - 这样可以解决一些警告。

有没有办法抑制有关数据框列名称的警告?

【问题讨论】:

    标签: r dplyr tidyverse rlang lintr


    【解决方案1】:

    lintr 是一个包,可帮助您以一致的风格写作。如果您有正当理由说明为什么需要使用 camelCase 而不是 snake_case,我不会试图规避这一点。我绝对不会尝试通过更改代码来删除警告。这会降低它的可读性,而样式指南的目标是让代码更具可读性和一致性!

    但是,在 linting 时,还有其他抑制警告的可能性。如果你看一下 GitHub 上的Readme.md,至少有两种可能:

    • 您可以在每行添加# nolint 或在整个代码块添加# nolint start# nolint end
    • 您可以在项目根目录中创建配置文件 (.lint) 并更改默认 linter。

    根据您在检查代码时调用lintr 的方式,可能还有其他选项。

    【讨论】:

    • 问题是我想在所有其他情况下都遵循这种风格——我的代码中的每个变量都应该是snake_case;只是不是我无法控制的数据框列。由于数据框警告,很难找到我想确保符合样式的所有其他实例。
    • 是的,那么第一个选项适合您。将需要使用 camelCase 的每一行添加到 # nolint。我认为,这些不是您包裹中的大部分行。对于那些需要手动检查的行,您是否遵守样式,但这应该不难,因为我不认为行数会非常多。
    • 我认为这可能是最好的解决方案(尽管在可读性方面有点分散伪命令的代码,因为样式指南合规性的目标是提高可读性!)不确定这对于 lintr 是否是一个合理的功能建议,因为从作者的角度来看,大多数 R 变量类型和数据框内容(可能在也可能不在包作者的控制之下)之间存在差异。
    • Github 上的问题中有一些关于如何处理来自其他包(以及其他样式)的函数名称的讨论。他们考虑解析命名空间并排除导入的函数。我不确定是否实现了它,但如果是的话,你也许可以通过使用utils::globalVariables 来解决你的问题...
    【解决方案2】:

    嗯 - 偶然我似乎已经解决了我自己的答案。

    而不是使用:

    rlang::quo(.data$MyFirstVar + .data$MySecondVar)
    

    你可以使用:

    rlang::quo(.data[["MyFirstVar"]] + .data[["MySecondVar"]])
    

    (当然,如果您的列名未知,您也可以将字符串替换为变量...)

    【讨论】:

      猜你喜欢
      • 2010-09-16
      • 2012-10-10
      • 1970-01-01
      • 2023-04-05
      • 2010-10-28
      • 1970-01-01
      • 2023-01-31
      • 2019-11-07
      • 2020-03-13
      相关资源
      最近更新 更多