R语言中 $ @ [] [[]] 句点
https://www.cnblogs.com/huaan011/p/18348912
https://docs.pingcode.com/ask/180671.html
R语言中$和@是什么意思
R语言中的$和@运算符在数据操作中扮演着至关重要的角色。$用于提取或替代列表、数据框(data frame)中的列(分量)、@则用于访问S4对象中的插槽(slot)。具体来说,$使我们能够方便地选取数据集中的特定变量,而@是面向S4类系统设计的高级编程特性之一,它允许开发者访问存储在S4对象中不透明部分的数据。
一、$运算符
$运算符是R语言中使用最频繁的运算符之一,常用于从列表或数据框中提取单一列的元素。由于数据框实质是一个列表,其中的每一列就是一个元素,因此可以使用$快速访问数据框的特定列。
用例说明
当我们有一个数据框df,其中包含列“age”和“gender”,你可以使用df$age来获取“age”列的所有数据。这样的操作使得数据处理变得简单而直观。
代码示例
df <- data.frame(age = c(21, 22, 23), gender = c('M', 'F', 'M'))
ages <- df$age # 提取“age”列
二、@运算符
另一方面,@运算符专门用于S4对象,这是一种更严格的面向对象的系统。S4对象由类定义和创建,其属性存储在“插槽”中,@使我们能够安全地访问这些插槽。
用例说明
如果创建了一个S4对象person,它有一个名为“age”的插槽,可以通过person@age来访问。使用@对插槽的操作需要对所操作的对象有深入了解,了解其结构和属性。
代码示例
setClass("Person",
slots = c(name = "character", age = "numeric"))
person <- new("Person", name = "John", age = 30)
person_age <- person@age # 访问“age”插槽
三、选择运算符比较
尽管$和@仅是单字符的差异,但它们在语义和应用场景上有明显的区别。 $通常用于标准的数据框操作,而@则专用于更复杂的编程结构。
$通常用于数据分析过程中的简单数据操作,它的优点在于简洁和直观。然而,这个运算符也有其局限性,例如不支持部分匹配,如果列名不完全匹配,就会返回NULL。
@则体现了R语言作为统计编程语言的深度。S4对象系统更适合在需要严格数据封装和复杂对象管理的场景下使用。然而,S4系统的复杂性也意味着,通常只有在开发大型程序库或进行高级统计建模时,程序员才需要使用它。
句号(点号)"."
在R语言中,句号(点号)"."通常用于变量命名、关联包中的函数或数据集、以及S3方法中的对象类定义,但它并没有特殊的语法含义。点号可以作为变量或函数名称的一部分,起到一个普通字符的作用,有助于增强代码的可读性。在变量命名中,句号常用于代替其他编程语言中的下划线“_”来区分单词或缩写。例如,一个描述用户年龄的变量可以命名为“user.age”。此外,在历史上,R语言广泛使用点号表示S3对象系统中不同类的方法,但在新的S4对象系统和R6面向对象编程中,点号的这种使用已经较少。
接下来,我们将详细描述点号在变量命名中的应用,并探讨其在R语言编程实践中的其他重要用途。
一、变量命名的习惯
在R语言中,变量可使用句号作为名称的一部分。这种命名策略很灵活,因为R并不限制句号在变量名中的使用,它可以置于变量名的任何位置,除了首位。通过点号的合理应用,开发者可以创建出表意清晰、易于区分的变量名。
例如:
account.balance:可能表示账户余额。
calculate.area:可能是一个计算面积的函数。
但需要注意的是,句号命名习惯与某些操作系统文件系统或其他编程语言中的命名习惯可能产生冲突。在面向对象编程中,句号通常用于访问对象的属性,而在R中,访问对象属性或成员通常使用符号"$"。
二、包与函数间的关联
R语言中,句号也用于明确指出函数或数据集来自哪个包。这在多个包含有同名函数或数据集的情况下尤为有用。
例如:
ggplot2::ggplot:表示ggplot2包中的ggplot函数,其中双冒号表示所属包的指定。
stats::lm:表示stats包中的线性模型(lm)函数。
通过这种句号的使用,可以避免不同包之间函数或数据集的命名冲突,并明确表示调用的源头。
三、S3类方法的定义
在面向对象编程的S3系统中,句号经常用于连接类名与通用函数,定义特定类的方法。虽然这种用法在S4和R6编程实践中逐渐少见,但它曾经是R中S3对象系统的一个标志性特征。
例如:
print.default:表示通用print函数针对default类的方法。
summary.lm:表示summary函数为线性模型(lm)对象定义的特定方法。
在编写S3类方法时,句号作为函数名的一部分,帮助R识别和调度适合于特定类的方法。
中括号[]是R语言的一个常用操作符,作用是提取(extract)或替换(replace)。
三种用法:
1 使用下标或名称
2 使用逻辑变量
3 使用重复序数
[],[[]] 都可以用来索引常见的数据结构,如:矩阵、数据框、列表等。可以通过维度,列数,名称等方法。
[]支持drop的用法,但是[[]]不支持drop的用法;
[[]]支持exact的参数。
相似的用法还有$、getElement、subset、data.table等语法。