[英]Impossible to install package dplyr (tibble.so requires version 3.4.0)
[英]$ is an internal generic function, so how did the tibble package extend it?
因為它在Internal Generic Functions 列表中,所以我知道$
是一個內部泛型 function。 據我所知,這意味着它不能使用 S3 進行擴展。 盡管如此,眾所周知, $
對 tibble 的行為與對數據幀的行為不同,這意味着 tibble package 的開發人員已經完成了我認為不可能的事情。 這是如何實現的? 我試圖在我的 IDE 中獲取$.tibble
的代碼,但 tibble tibble::"$".tibble
什么也沒返回。
使用以下內容在 R 和任何加載的包中查找示例。 (如果加載了 tibble package ,它也會在其中列出任何 $ 方法,但請注意,tibble 的 class 名稱不是 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"
或者:
一個關鍵的考慮因素是 $ 之后的部分即使您擴展它也不會被評估。
如果第一個參數是 object ( is.object(x)==TRUE
),您可以更改內部 generics 的行為。 小標題是 object。 大多數用戶創建的 S3 類都是。 您之前的問題是您試圖更改矩陣的行為,而矩陣不是“對象”,因此您無法更改此類對象的內部 generics 的調度。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.