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 [...]另外,[[可以使用确切参数控制]的部分匹配行为。
那么,使用[[
而不是$
的论点是因为前者在编写代码时提供了更大的控制和透明度吗?使用$
的实际风险是什么?如果[[
是首选,那么 是否适合使用$
- 提取?
答案 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
。