R S3类的方括号是什么?
这是我从你那里得到的。这显示了S3类的泛型和方法的编写。但我不理解这些功能所分配的符号或约定。以下是我的问题:R S3类的方括号是什么?,r,r-s3,R,R S3,这是我从你那里得到的。这显示了S3类的泛型和方法的编写。但我不理解这些功能所分配的符号或约定。以下是我的问题: 使用backticks`来定义函数名。通常我们不会使用反勾号甚至双引号来分配变量/函数,但我经常看到这种情况。这是命名约定吗 为什么在blob名称之前包含?通常情况下,它不只是被称为blob,方法是method.blob吗 为什么会有括号?特别是,[摘要] 如果要在R中创建一个新对象,并希望其具有“不同”的子集和赋值行为,则应为这些操作创建关联的方法 正在以您期望的方式工作-方法分
- 使用backticks
来定义函数名。通常我们不会使用反勾号甚至双引号来分配变量/函数,但我经常看到这种情况。这是命名约定吗李>`
- 为什么在blob名称之前包含
?通常情况下,它不只是被称为blob,方法是method.blob吗 - 为什么会有括号?特别是,
[摘要] 如果要在R中创建一个新对象,并希望其具有“不同”的子集和赋值行为,则应为这些操作创建关联的方法
正在以您期望的方式工作-方法分派
正在重写S3[.blob
子集运算符[
[
是子集运算符。[
是一种对新的[.blob
对象进行子集设置的方法。因此,blob
以标准的s3方法分派方式使用(正如您在问题中指出的那样),不能使用特殊符号(例如,回号、括号、百分号、名称中带空格的变量)默认情况下为“assigned to”。要这样做,如果用倒勾将其包围,则它可以工作。例如,名为
的变量不能用ab
ab
[[您也可以用倒勾调用函数,例如
将给您第四个字母,它相当于`[`(字母,4)
。您可以使用backticks做一些事情,包括:使用标准语法调用中缀运算符(例如字母[4]
或iris[['Species']]
)或引用具有非法(?)字符的变量/列名,例如,如果`[`(iris,'Species')
的列被命名为dat
,你可以说“0错误列名”“
,但不能说dat$`0坏列名`
。我还想说几件事?dat$0坏列名
#' @export `[.blob` <- function(x, i, ...) { new_blob(NextMethod()) } #' @export `[<-.blob` <- function(x, i, ..., value) { if (!is_raw_list(value)) { stop("RHS must be list of raw vectors", call. = FALSE) } NextMethod() } #' @export `[[<-.blob` <- function(x, i, ..., value) { if (!is.raw(value) && !is.null(value)) { stop("RHS must be raw vector or NULL", call. = FALSE) } if (is.null(value)) { x[i] <- list(NULL) x } else { NextMethod() } }
## Create your own blob object (class) blob <- 1:5 attr(blob, "class") <- "blob" ## create a subset operator, which in this example just calls the next method in the s3 dispatch chain `[.blob` <- function(x, i, j, ...) NextMethod()
blob[3] # [1] 3
## define the function to always subset the first element `[.blob` <- function(x, i, j, ...) { i = 1; NextMethod() }
blob[1] # [1] 1 blob[2] # [1] 1 blob[3] # [1] 1
`[<-.blob` <- function(x, i, j, ...) { i = 5; NextMethod() }
blob[1] <- 100 blob # [1] 1 2 3 4 100 # attr(,"class") # [1] "blob"
[ <- 1:5 # Error: unexpected '[' in "["
`[` <- 1:5 `[` # [1] 1 2 3 4 5