R:什么是老虎机?


79

有人知道R中的插槽吗?

我没有找到其含义的解释。我得到一个递归定义:“插槽函数返回或设置有关对象各个插槽的信息”

帮助将不胜感激,谢谢-胡同


这是从slot()功能帮助中获得的-并不意味着要记录什么是插槽,而是如何访问它们。
加文·辛普森

Answers:


86

插槽链接到S4对象。插槽可以看作是对象的一部分,元素或“属性”。假设您有一个汽车对象,那么您可以拥有“价格”,“门数”,“发动机类型”,“里程”插槽。

在内部,它表示一个列表。一个例子 :

setClass("Car",representation=representation(
   price = "numeric",
   numberDoors="numeric",
   typeEngine="character",
   mileage="numeric"
))
aCar <- new("Car",price=20000,numberDoors=4,typeEngine="V6",mileage=143)

> aCar
An object of class "Car"
Slot "price":
[1] 20000

Slot "numberDoors":
[1] 4

Slot "typeEngine":
[1] "V6"

Slot "mileage":
[1] 143

在这里,价格,门数,类型引擎和里程数是S4类“汽车”的插槽。这是一个简单的示例,实际上插槽本身可以再次成为复杂的对象。

插槽可以通过多种方式访问​​:

> aCar@price
[1] 20000
> slot(aCar,"typeEngine")
[1] "V6"    

或通过构造特定方法(请参阅其他文档)。

有关S4编程的更多信息,请参见此问题。如果这个概念对您来说仍然很模糊,那么面向对象编程的一般介绍可能会有所帮助。

PS:请注意与数据框和列表的区别,在数据框和列表中,您可以使用$它们访问命名的变量/元素。


3
+1个不错的答案Joris。您可能想添加一个示例,slot(aCar, "price")作为另一种用法,尤其是在op正在查看该slot()函数时
Gavin Simpson

谢谢,您的回答非常有帮助!!
user573347 2011年

9
要获得一个类的所有位置,请使用getSlots(),或slotNames()为其指定名称。
洛朗

18

就像names(variable)列出了$一个复杂变量的所有-accessible名称一样

slotNames(object) 列出对象的所有插槽。

非常方便地发现您的健身对象所包含的好东西,为您带来观赏乐趣。


10

除了@Joris指向的资源之外,还有他自己的答案,请尝试阅读?Classes,其中包括以下内容:

 Slots:

      The data contained in an object from an S4 class is defined
      by the _slots_ in the class definition.

      Each slot in an object is a component of the object; like
      components (that is, elements) of a list, these may be
      extracted and set, using the function ‘slot()’ or more often
      the operator ‘"@"’.  However, they differ from list
      components in important ways.  First, slots can only be
      referred to by name, not by position, and there is no partial
      matching of names as with list elements.
      ....

1

不知道为什么R必须重新定义所有内容。大多数普通的编程语言将它们称为“属性”或“属性”。


这是合法的评论。让我们承认R充满了古怪的设计选择。
绯红色国王

我可以理解70年代的功能的怪异术语,但是插槽并不在其中,当大多数OO语言落后数十年时,它们实际上就被添加了。
最多
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.