r - $ 是一个内部泛型函数,那么 tibble 包是如何扩展它的呢?
问题描述
因为它在内部通用函数列表中,所以我知道这$
是一个内部通用函数。据我所知,这意味着它不能使用 S3 进行扩展。尽管如此,众所周知,$
tibble 的行为与数据帧的行为不同,这意味着 tibble 包的开发人员已经完成了我认为不可能的事情。这是如何实现的?我试图$.tibble
在我的 IDE 中获取代码,但tibble::"$".tibble
没有返回任何内容。
解决方案
使用以下内容在 R 的基础和任何已加载的包中查找示例。(如果加载了 tibble 包,它也会列出其中的任何 $ 方法,但请注意 tibble 的类名不是 tibble 。)
methods("$")
## [1] $,envRefClass-method $,refObjectGenerator-method
## [3] $.bibentry* $.DLLInfo
## [5] $.package_version $.person*
getAnywhere("$.bibentry")
## ...snip...
library(tibble)
tib <- tibble()
class(tib)
## [1] "tbl_df" "tbl" "data.frame"
getAnywhere("$.tbl_df")
## ..snip...
假设您已经安装了相关软件包,这里还有一些示例:
zoo:::"$.zoo"
proto:::"$.proto"
gsubfn:::"$.fn"
dyn:::"$.dyn"
或者:
- https://github.com/cran/zoo/blob/master/R/zoo.R
- https://github.com/hadley/proto/blob/master/R/proto.R
- https://github.com/cran/gsubfn/blob/master/R/fn.R
- https://github.com/cran/dyn/blob/master/R/dyn.R
一个关键的考虑因素是 $ 之后的部分即使您扩展它也不会被评估。
推荐阅读
- swift - 如何使用 Swift 的授权服务验证本地 macOS 用户的密码?
- android - 滑动视图 + appbar(协调器布局)
- python - 如何将字符串列表中的反向字符串与python中的原始字符串列表进行比较?
- android - 与 AlertDialog 一起显示/隐藏键盘
- r - 使用 spml 在 R 中的面板空间模型中出错
- javascript - 如何在地图上复制项目(不是最后)
- vb.net - 完成后从 BackgroundWorker 函数获得回复
- java - 逐层旋转二维数组
- php - mysqli_query($connect, $query) 返回 false:如何解决这个问题?
- typescript - 等待 promises.all() 完成一个嵌套的 api 调用