前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >R 利用美元符号$进行自动补全是怎么实现的?

R 利用美元符号$进行自动补全是怎么实现的?

作者头像
王诗翔呀
发布2023-02-28 16:37:29
7090
发布2023-02-28 16:37:29
举报
文章被收录于专栏:优雅R优雅R

我们知道在使用 R 的过程中,当我们访问列表、数据框等对象时,在对象后键入美元符号 $ 会弹出关于自动补全的提示,这在 RStduio 中编写代码时非常方便好用,那么它是如何实现的呢?

首先,这跟 RStduio 无关,因为如果你在终端中使用 R 的话,键入美元符号后再使用 <Tab> 键,也是会有自动提示的。所以,R 本身通过某种实现完成了这一提示。

这里我们利用网上的一个简单例子来了解这一过程。

代码语言:javascript
复制
# Define class
setClass("customList",
         representation("list")
)
 
# Make example
tmp <- new("customList",
           list(
             test='a',
             b=1:3
           )        
)
 
tmp

上面创建了一个简单的类和相应的实例 tmp

代码语言:javascript
复制
> tmp
An object of class "customList"
[[1]]
[1] "a"
 
[[2]]
[1] 1 2 3

当我们键入 tmp$ 后,编辑器很智能地弹出了自动补全提示:

image

实际上在这一过程中,R 调用了一个默认的隐藏泛型函数 .DollarNames()

image-1673428611201

现在我们构造了一个新的类,那么添加新的匹配方法是可以更改自动补全的。

代码语言:javascript
复制
.DollarNames.customList <- function(x, pattern="") {
  grep(pattern, names(x), value=TRUE)[1]
}

运行完上面的代码后,我们再来看补全,它就变成了只返回第一个元素的名字:

image-1673432084352

了解了这个之后,我们就算要魔改也是 okay 的!

试着改不存在的名称:

代码语言:javascript
复制
.DollarNames.customList <- function(x, pattern="") {
  c("a", "b", "c")
}

image-1673432170893

R 就是这么任性啊。


本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2023-01-11,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 优雅R 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档