使用$ -extraction有什么问题?

时间:2016-02-10 19:51:44

标签: r

fortune(312)fortune(343)提到使用$提取列表元素而不是[[的问题,但没有具体说明危险是什么

The problem here is that the $ notation is a magical shortcut and like any other magic
if used incorrectly is likely to do the programmatic equivalent of turning yourself into 
a toad.
   -- Greg Snow (in response to a user that wanted to access a column whose name is stored 
      in y via x$y rather than x[[y]])
      R-help (February 2012)

Sooner or later most R beginners are bitten by this all too convenient shortcut. As an R 
newbie, think of R as your bank account: overuse of $-extraction can lead to undesirable 
consequences. It's best to acquire the '[[' and '[' habit early.
   -- Peter Ehlers (about the use of $-extraction)
      R-help (March 2013)

查看`$`的文档,我发现了

  

$仅对递归对象有效

  

主要区别在于$不允许计算索引,而[[do [...]另外,[[可以使用确切参数控制]的部分匹配行为。

那么,使用[[而不是$的论点是因为前者在编写代码时提供了更大的控制和透明度吗?使用$的实际风险是什么?如果[[是首选,那么 是否适合使用$ - 提取?

1 个答案:

答案 0 :(得分:2)

考虑清单:

foo<-list(BlackCat=1,BlackDog=2, WhiteCat=3,WhiteDog=4)

假设您想根据两个用户参数变量调用indice:颜色和动物种类。 将代码中的颜色和种类参数化为

myColour<-"Black"
mySpecies<-"Dog"

您可以轻松调用索引参数

foo[[paste0(myColour,mySpecies)]]

使用[[[。但是,$提取不是这种情况:foo $ paste0(myColour,mySpecies)不会评估函数paste0