非标准评估:对*编程*(不是交互式 R)有什么好处?

问题描述 投票:0回答:1

我不明白 R 中NSE(非标准评估)对于编程的成本效益。我可以理解为什么 NSE 对于 interactive R 可能很有用,但对于编程——即编写可重用的脚本和函数——我的经验是,它主要增加了歧义、混乱和调试时间,只是为了节省一些用户击键。

在我见过的几乎所有案例中,包括整个Advanced R中的案例,NSE 似乎可以通过添加更多内容来避免:

  • df$x
    df[[x]]
  • “引言”
  • 显式和/或内联函数
  • do.call

具有明显的好处。明确性

有人可以提供一些令人信服的例子来说明 NSE 何时/为何对于 R 中的编程有用?

有关 NSE 未记录危险的相关帖子

r tidyverse eval nse
1个回答
0
投票

我不知道是否存在一个绝对令人信服的不可避免的 NSE 代码示例,就您所描述的术语而言(最终这是个人观点),但我将引用

data.table
最常用的 R 包之一的小插图“data.table 上的编程”:

...从其第一个版本开始,就启用了

subset
with
(或
within
)函数...这对于减少代码重复、增强可读性以及减少用户必须输入的字符总数非常有用...

这种接口的问题是我们无法轻松地参数化使用它的代码。这是因为传递给这些函数的表达式在计算之前已被替换。最简单的解决方法是首先避免惰性评估,然后退回到不太直观、更容易出错的方法,例如

df[["variable"]]
等。

因此,NSE 的一些主要好处是提高了可读性和可维护性,而不仅仅是节省击键次数。此外,虽然有时您可能会遇到不易调试的代码,但无 NSE 方法也确实容易出错。

这里是在线小插图: https://rdatatable.gitlab.io/data.table/articles/datatable-programming.html

这里是源永久链接: https://github.com/Rdatatable/data.table/blob/88039186915028ab3c93ccfd8e22c0d1c3534b1a/vignettes/datatable-programming.Rmd

© www.soinside.com 2019 - 2024. All rights reserved.