R语言中$和@是什么意思

news/2024/10/19 16:11:02

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识别和调度适合于特定类的方法。

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.ryyt.cn/news/73479.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

SpringBoot 整合 RabbitMQ

简介 一般在开发过程中: 生产者工程:application.yml 文件配置 RabbitMQ 相关信息;在生产者工程中编写配置类,用于创建交换机和队列,并进行绑定;注入 RabbitTemplate 对象,通过 RabbitTemplate 对象发送消息到交换机。消费者工程:application.yml 文件配置 RabbitMQ 相…

P3571 [POI2014] SUP-Supercomputer 题解

P3571「POI2014」SUP-Supercomputer 题解 一道 “较” 水的黑题 (可一开始苦思冥想还是不会)。 本蒟蒻的第一篇黑题题解,求赞。 题意简化 给定一棵 $n$ 个节点、根节点为 $1$ 的有根树。$q$ 次询问中每次给定一个 $k$,输出需要最少用几次操作次数 删除 完整棵树。每次操作可…

Spring IoC

一、Spring IoC的理解IoC(Inversion of Control:控制反转) 是一种设计思想,而不是一个具体的技术实现。IoC 的思想就是将原本在程序中手动创建对象的控制权,交由 Spring 框架来管理。不过, IoC 并非 Spring 特有,在其他语言中也有应用。 控制反转?控制:指的是对象创建(…

修改VS的代码高亮颜色

点击工具->选项选择“字体和颜色”找到“用户成员-xx”、“用户类型-xx”,点击即可修改前景色、背景色

ArkUI-Image详解

ArkUI-Image详解 文章摘要: 给Image组件设置属性可以使图片显示更灵活,达到一些自定义的效果。以下是几个常用属性的使用示例。这时可以使用interpolation属性对图片进行插值,使图片显示得更清晰。Image组件引入本地图片路径,即可显示图片(根目录为ets文件夹)。通过rende…

强化学习算法笔记之【DDPG算法】

强化学习笔记第2篇,讲解DDPG算法。 感兴趣可以参考或者复刻。强化学习笔记之【DDPG算法】 目录强化学习笔记之【DDPG算法】前言:原论文伪代码DDPG 中的四个网络代码核心更新公式前言: 本文为强化学习笔记第二篇,第一篇讲的是Q-learning和DQN 就是因为DDPG引入了Actor-Crit…

python输出hello world

输出print("hello world")

2161: 【例9.3】小写字母转大写字母 【超出字符数据范围】

include <bits/stdc++.h> using namespace std; int main( ) { char a; cin >> a; cout << char(a-32); return 0; } // 反思1: cin >> a; 忘记写了 反思2: +是转为小写字母-是转为大写字母 【做错】