【问题标题】:You can abbreviate list names? Why?您可以缩写列表名称吗?为什么?
【发布时间】:2012-06-16 19:37:53
【问题描述】:

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

> 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  

【问题讨论】:

  • 并不矛盾。当且仅当存在唯一匹配时,才会解析名称的前导子字符串。
  • +1 让我思考为什么 $ 是这样实现的。
  • 这可以追溯到贝尔实验室的 S 早期。这是一件坏事,但我有时仍然使用它来节省打字。也适用于函数参数,例如 predict(m, type = "resp")cor(x, y, use="pair")

标签: r list names


【解决方案1】:

我怀疑$ 运算符的部分匹配是一个不错的(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 &lt;- "whatisthe"; wtf[[X]] 但不是这个X &lt;- "whatisthe"; wtf$X。)

【讨论】:

  • 太好了,谢谢。我确信自动完成功能应该会有所帮助,但它只是感觉有点不祥。我只是在等待它再次咬人。
  • @user1073999 -- 我同意。我什至觉得我已经看到一些 R 负责人哀叹早期的设计决定,但现在不记得在哪里。如果其他人看到了,我会很感兴趣。
  • 经过进一步思考,我发现在实现选项卡式自动完成之前,它对交互式使用会很有帮助。
【解决方案2】:

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

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

【讨论】:

  • 我认为完整的算法也使用了位置匹配。
  • 您能详细说明一下吗?例如 '> a a(a=1, a=2)' 'a(a = 1, a = 2) : 由多个实际参数匹配的形式参数“aa”
  • 我只是观察到您不必命名参数,在这种情况下,R 使用位置匹配。由于您可以混合使用参数名称和没有名称的情况,因此我认为完整的答案应该提到这一点。因此,在您的示例中,a(1, ab=2) 仍然有效,a(ab=2, 1) 也是如此。
猜你喜欢
  • 1970-01-01
  • 2021-07-22
  • 2021-06-01
  • 2010-12-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-10-19
相关资源
最近更新 更多