r-使用相同语法的$和()

  • 本文关键字:语法 r r6
  • 更新时间 :
  • 英文 :


我确信这个问题有一个非常基本的答案,这可能就是为什么我发现很难真正搜索和找到答案的原因。但是有人能解释一下在R中以相同的语法组合$和((到底意味着什么吗?

例如这个小插曲:

https://cran.r-project.org/web/packages/pivottabler/vignettes/v00-vignettes.html

library(pivottabler)
pt <- PivotTable$new()
pt$addData(bhmtrains)
pt$renderPivot()

直到几年后的今天,我在学习R时从未遇到过这种情况。我最近看到的越来越多,但这对我来说不是直观的吗?

$通常用于访问数据帧的R类列中对象的子结构,例如dataframe$column1,而((通常用于包含命名函数的所有参数,例如rnorm(10,0,1)

当它们一起使用时意味着什么?例如x$y(z)

$lar是一个通用运算符,用于提取或替换递归对象的部分,如列表和数据帧。

列表是一个由有序的对象集合(包括其他列表(组成的对象,可能是不同类型的,所述组件。

考虑以下列表:

L <- list(a = 1, f = function() message("hello"))

这是一个包含两个组件的列表:af。第一个是数字,第二个是函数。通过应用$-运算符,可以提取组件的值,该值也可以重新分配:

L$a 
# 1
L$a <- 2
L$a 
# 2

f组件的情况下,因为它是一个函数,所以可以得到它的主体:

L$f 
# function() message("hello")

这与每个函数标识符一致:它的值是函数的主体。毫不奇怪,将括号应用于函数的标识符,即可执行函数,即:

L$f()
# hello

这为非常强大的结构打开了大门,在那里您可以存储数据和操作它们的函数。

这种逻辑类似于OOP世界中使用的类。当然,您需要更多的特性,比如实例化、继承。例如,您在标签中提到的R6包提供了这样的机制。

library(R6)
A <- R6Class("A", list(f=function() message("hello") ))
a <- A$new()
a$f()
# hello

A是R6类,因此A$new()通过类函数new创建该类的新实例a。正如您所看到的,使用类似于上面L$f()的语法(和逻辑(来调用此函数。实例a继承了类函数f,这里说方法a$f()执行它

最新更新