你可以缩写列表名称吗?为什么?

时间:2012-06-16 19:37:54

标签: r list names

这让我非常糟糕。你可以缩写列表名称吗?我之前从未注意到它,而且我完全搞砸了一天。有人可以解释这里发生了什么,为什么它可能比它可怕更有用?为什么它与底部的不一致?如果我可以关掉它?

> wtf <- list(whatisthe=1, pointofthis=2)  
> wtf$whatisthe  
[1] 1  
> wtf$what  
[1] 1  

> wtf <- list(whatisthe=1, whatisthepointofthis=2)  
> wtf$whatisthepointofthis  
[1] 2  
> wtf$whatisthep  
[1] 2  
> wtf$whatisthe  
[1] 1  
> wtf$what  
NULL  

2 个答案:

答案 0 :(得分:16)

我怀疑$运算符的部分匹配是一个很好的(r)功能,可以在实现选项卡式完成之前的几天内进行交互式使用

如果您不喜欢这种行为,可以改用"[["运算符。 它需要一个参数exact=,它允许您控制部分匹配行为,默认为TRUE

wtf[["whatisthep"]]                 # Only returns exact matches
# NULL

wtf[["whatisthep", exact=FALSE]]    # Returns partial matches without warning
# [1] 2

wtf[["whatisthep", exact=NA]]       # Returns partial matches & warns that it did
# [1] 2
# Warning message:
# In wtf[["whatisthep", exact = NA]] :
#   partial match of 'whatisthep' to 'whatisthepointofthis'

(这是R编程中"[["通常优先于$的一个原因。另一个原因是X <- "whatisthe"; wtf[[X]]X <- "whatisthe"; wtf$X而不是{{1}}。< / p>

答案 1 :(得分:2)

对于列表元素名称(和函数参数名称),R应用以下算法:

如果项目完全匹配,请使用它。如果没有完全匹配,请查找部分匹配。如果只有一个部分匹配,请使用它。否则,什么都不用。