Ответ 1
Я ничего не вижу в R Language defenition об этом (через this),
Но разница в основном: @
для объектов S4, $
для списков (включая многие объекты S3).
Это может быть немного абстрактно, поэтому, если вам интересно, что использовать для данного объекта, просто посмотрите str
, например:
str(yo)
# 'data.frame': 10 obs. of 2 variables:
# $ c.1.10. : int 1 2 3 4 5 6 7 8 9 10
# $ c.rnorm.10..0..1..: num -0.536 -0.453 -0.599 1.134 -2.259 ...
Здесь мы можем видеть $
, поэтому $
- что использовать.
В качестве альтернативы,
str(myTrack)
# Formal class 'track' [package ".GlobalEnv"] with 2 slots
# [email protected] x: int [1:9] -4 -3 -2 -1 0 1 2 3 4
# [email protected] y: num [1:9] 0.0183 0.0498 0.1353 0.3679 1 ...
Здесь мы видим @
, поэтому @
- это то, что нужно использовать.
Это может стать еще более запутанным, когда объект S4 имеет список в одном из своих слотов (первое, что приходит мне в голову, - это SpatialPolygonsDataFrame
, где столбец в слоте data
можно получить через [email protected]$column
)
Возможно, см. также ?slot
, который дает немного более подробную информацию, относящуюся к @
, ?isS4
для альтернативы str
, чтобы сказать вам, можно ли ожидать, что @
будет работать с объектом, или Глава книги Хэдли Уикхема на объектах S4 для большей части S4 в целом.