16

这让我很糟糕。您可以缩写列表名称吗?我以前从未注意到它,我完全被搞砸了一天。有人可以解释这里发生了什么以及为什么它可能比它更有用吗?为什么它在底部这样不一致?如果我可以把它关掉?

> 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  
4

2 回答 2

16

我怀疑$在选项卡式完成实施之前的日子里,操作员的部分匹配是一个很好的交互式使用功能

如果您不喜欢这种行为,则可以改用"[["运算符。它需要一个参数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。)

于 2012-06-16T19:56:25.713 回答
2

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

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

于 2012-06-16T19:52:01.567 回答