【问题标题】:$ is an internal generic function, so how did the tibble package extend it?$ 是一个内部泛型函数,那么 tibble 包是如何扩展它的呢?
【发布时间】:2021-06-02 14:57:18
【问题描述】:
【问题讨论】:
-
您可以找到$.tbl_df* here 的代码,或者使用 tibble:::$.tbl_df。 *"口语“tibble”是指具有tbl_df类的数据框"
标签:
r
tibble
dollar-sign
r-s3
【解决方案1】:
如果第一个参数是对象 (is.object(x)==TRUE),您可以更改内部泛型的行为。小标题是一个对象。大多数用户创建的 S3 类都是。您之前的问题是您试图更改矩阵的行为,而矩阵不是“对象”,因此您无法更改此类对象的内部泛型的调度。
【解决方案2】:
使用以下内容在 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"
或:
一个关键的考虑因素是 $ 之后的部分即使你扩展它也不会被评估。