除了部分匹配之外,$ 运算符可以做 [ 和 [[ 不能做的任何事情吗?

如何解决除了部分匹配之外,$ 运算符可以做 [ 和 [[ 不能做的任何事情吗?

我相信 $ 运算符的以下内容是正确的:

  • 它允许部分匹配名称。例如,如果没有使用 data$Sky 名称data$Skywalker 可以匹配 Sky
  • [[[ 不同,它不能用于原子向量。
  • 它不能与 - 之类的运算符结合使用。没有像 mtcars$-mpg 这样的有效语法。 [[[ 也不能对名称执行此操作,但 mtcars[,-1] 可以。
  • 它仅适用于名称
  • 抛开部分匹配不谈,对于一个数据框,data$name 等价于 data[,"name"] 例如mtcars$cylmtcars[,"cyl"] 相同。我很确定 data[["name"]] 也是等价的,例如mtcars[["cyl"]]
  • 除了部分匹配之外,对于不是数据框的命名列表,data$namedata[["name"]] 相同。

这是否意味着如果我不关心部分匹配,我总是可以用$[替换[[?还是我遗漏了某些功能

解决方法

对于基数 R,我最好的猜测来自 the documentation for $。以下引用是最相关的:

$ 仅对递归对象有效

$ 不允许计算索引,而 [[ 允许。 x$name 等价于 x[["name",exact = FALSE]]。此外,可以使用精确参数控制 [[ 的部分匹配行为。

默认行为是仅在通过 $ 从递归对象(环境除外)中提取时才使用部分匹配。即使在这种情况下,也可以通过选项打开警告(warnPartialMatchDollar = TRUE)。

所以文档似乎证实了我的信念,除了部分匹配之外,$ 只是语法糖。但是,有四点我不确定:

  1. 我从不相信 R 的文档。正因为如此,我相信有经验的用户会发现我所说的内容有漏洞。
  2. 我说这只是我对基本 R 的猜测,因为 $ 是一个泛型运算符,因此它的含义可以被包改变,tibble 是一个常见的例子。
  3. $[ 也可用于环境,但我从未见过有人这样做。
  4. 我不知道什么是“计算指数”。
,

根据一本关于​​高级 R 的书,除了部分匹配之外,$ 和 [ 运算符在数据帧上(不是在列表上)是相同的。它指出

$ 是一个简写操作符:x$y 大致相当于 x[["y"]]。 ... $ 和 [[ 之间的一个重要区别是 $ 确实 (从左到右)部分匹配:

这是引用:下一个链接的第 4.3.2 节: https://adv-r.hadley.nz/subsetting.html#section-1

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?