- 此问题在此处已有答案**:
Why does R find a data.frame variable that isn't in the data.frame?(2个答案)
3天前关闭。
看起来R操作符$会查找一个与请求的字段名相似的字段名,如果它不存在的话,这在我看来是一个完全没有经验和非常危险的行为。
我在两个版本的R中复制了以下代码
- R版本4.2.2打补丁(2022 - 11 - 10 r83330)--"天真与信任"。
- R版本3.6.3(2020 - 02 - 29)--"拿着风向袋"。
R version 4.2.2 Patched (2022-11-10 r83330) -- "Innocent and Trusting"
Copyright (C) 2022 The R Foundation for Statistical Computing
Platform: x86_64-pc-linux-gnu (64-bit)
R is free software and comes with ABSOLUTELY NO WARRANTY.
You are welcome to redistribute it under certain conditions.
Type 'license()' or 'licence()' for distribution details.
R is a collaborative project with many contributors.
Type 'contributors()' for more information and
'citation()' on how to cite R or R packages in publications.
Type 'demo()' for some demos, 'help()' for on-line help, or
'help.start()' for an HTML browser interface to help.
Type 'q()' to quit R.
[Previously saved workspace restored]
- 不需要任何包,所有可能加载的变量都将被删除,即使它是一个新的R会话并且环境之前为空。**
> rm(list=ls())
- 一个非常简单的 Dataframe 由两个字段定义**
> DF = data.frame(
+ other_field = c(0,1),
+ log_scale_coeff_diff = c(1,2)
+ )
- log_scale_coeff字段不存在,因此此表达式按预期返回错误**
> DF[,"log_scale_coeff"]
Error in `[.data.frame`(DF, , "log_scale_coeff") :
undefined columns selected
- 但其他等效表达式不返回任何错误**
> DF$log_scale_coeff
[1] 1 2
- 神秘地返回另一个字段的值,该字段的名称包含不存在的请求字段。!!!!!!**
> DF$log_scale_coeff_diff
[1] 1 2
- 这真的是预期的结果吗,我简直不敢相信**
I would like to know if this is really the expected behaviour or if it is a strange and unknown bug.
1条答案
按热度按时间qco9c6ql1#
是的,这完全是预期结果。请检查帮助文件:
该条内容如下:
[[和$都选择列表中的单个元素。主要区别是$不允许计算索引,而[[允许。x $name等效于x "name",exact = FALSE。此外,[[的部分匹配行为可以使用exact参数控制。
如您所见,
$
适用于部分匹配。或者,可以使用:x[["name", exact = F]]
以获得类似的结果。在您的情况下,您可以使用这个来获得相同的结果: