gpt4 book ai didi

r - S4 类是对象吗?

转载 作者:行者123 更新时间:2023-12-04 10:17:27 26 4
gpt4 key购买 nike

从扩展 R by Chamber 中,我听说 R 中存在的一切都是对象(在 Python 中也是如此:Python 中的类是对象,类的类是元类。)。 S4 类是对象吗? S4类的类型是什么?

> setClass("Person",
+ slots = c(
+ name = "character",
+ age = "numeric"
+ )
+ )

> typeof(Person)
Error in typeof(Person) : object 'Person' not found
> typeof("Person")
[1] "character"

> attributes(Person)
Error: object 'Person' not found

谢谢。

最佳答案

另一种看待这个问题的方式是setClass()返回的对象。是类 classGeneratorFunction 的对象.这绝对是一个对象。此外,由于 R 中的函数也被视为对象,因此它是一个对象。

我们将通过调整原始帖子中的代码来说明。

personGenerator <- setClass("Person",
slots = c(name = "character",
age = "numeric"))

aPerson <- personGenerator()

此时,我们有一个类生成器函数,可以生成 Person 类型的对象。 ,以及 Person 的一个实例.

我们可以通过 str() 看到这一点。功能。
str(aPerson)
> str(aPerson)
Formal class 'Person' [package ".GlobalEnv"] with 2 slots
..@ name: chr(0)
..@ age : num(0)

同样,我们可以打印 personGenerator() 的结构功能。
> str(personGenerator)
Formal class 'classGeneratorFunction' [package "methods"] with 3 slots
..@ .Data :function (...)
..@ className: chr "Person"
.. ..- attr(*, "package")= chr ".GlobalEnv"
..@ package : chr ".GlobalEnv"
>

回到钱伯斯的引述,它在哈德利威克姆的高级 R 中被叙述为:

To understand computations in R, two slogans are helpful.

-- Everything that exists is an object

-- Everything that happens is a function call

John Chambers quoted in Advanced R, p. 79.



由于原问题有点歧义,如果“S4类”指的是 setClass()的返回值所代表的东西,类型为 classGeneratorFunction 的对象,这确实是一个对象。但是,如果原题中的“S4类”指的是 setClass()的参数中的内容,代表 Person的东西除非代码实例化它,否则它不是对象,如上图所示 personGenerator()功能。

关于r - S4 类是对象吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61011183/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com