我想了解" @"的功能。 (在标志处)在R.
让我们说:
在下面的示例中,如果我致电perf1@x.values
,则会开始显示所有x.values
。但我无法通过调用perf@x.values[2]
来访问x.values的第二个值!
> str(perf1)
Formal class 'performance' [package "ROCR"] with 6 slots
..@ x.name : chr "False positive rate"
..@ y.name : chr "True positive rate"
..@ alpha.name : chr "Cutoff"
..@ x.values :List of 1
.. ..$ : num [1:3966] 0 0.0005 0.001 0.0015 0.0015 0.002 0.0025 0.0025 0.003 0.0035 ...
..@ y.values :List of 1
.. ..$ : num [1:3966] 0e+00 0e+00 0e+00 0e+00 5e-04 5e-04 5e-04 1e-03 1e-03 1e-03 ...
..@ alpha.values:List of 1
.. ..$ : num [1:3966] Inf 0.996 0.993 0.986 0.98 ...
我想知道" @"的用法是什么?登录R?
以及如何使用@符号来调用某些值?
感谢
答案 0 :(得分:7)
S4个对象是带有节点或叶子的列表(技术上称为'slots'),可以使用@
运算符访问这些对象,就像使用$
访问S3对象一样。
看看:
str( perf1@x.name )
str( perf1@y.name )
请注意,这些可能包含普通的S3列表,如下所示:
str( perf1 @ x.values) # a list
str( perf1 @ x.values[[1]] ) # a numeric vector
perf1 @ x.values[[1]][1] # the first value in `x.values`
它被认为是不好的形式,因为S4对象的作者假设为你配备了访问器功能,允许你获得任何有用的东西。