首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在相同的语法中使用$和()?

在相同的语法中使用$和()?
EN

Stack Overflow用户
提问于 2022-01-14 13:45:15
回答 1查看 50关注 0票数 1

我确信这有一个非常基本的答案,这可能就是为什么我发现很难真正地寻找和找到一个答案。但是..。请有人解释一下,在R中用相同的语法组合$和()意味着什么?

例如,从这一小插曲:

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

代码语言:javascript
复制
library(pivottabler)
pt <- PivotTable$new()
pt$addData(bhmtrains)
pt$renderPivot()

直到几年后,我才在学习R的时候遇到过这种情况。我最近看到的越来越多,但这不是我的直觉吗?

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

当它们一起使用时,这是什么意思?例如x$y(z)

EN

回答 1

Stack Overflow用户

发布于 2022-09-11 19:15:22

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

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

考虑以下清单:

代码语言:javascript
复制
L <- list(a = 1, f = function() message("hello"))

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

代码语言:javascript
复制
L$a 
# 1
L$a <- 2
L$a 
# 2

对于f组件,因为它是一个函数,所以您可以得到它的主体:

代码语言:javascript
复制
L$f 
# function() message("hello")

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

代码语言:javascript
复制
L$f()
# hello

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

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

代码语言:javascript
复制
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()执行它。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70711537

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档