Приведение типа данных класса в R с помощью как
Я понимаю, что в R у вас есть несколько базовых типов данных (vector, matrix, list, data.frame
) и затем в пакетах R у вас есть несколько расширенных типов, называемых S3-class или S4-class (ppp
,owin
, spatialPointsDataFrame
и много других. Некоторые функции в R-пакетах работают только с аргументами специального типа.
Мне нужно объяснение о преобразовании между различными классами и типами данных в R:
Иногда я могу использовать такой код:
m = c(1, 2, 3, 4)
df = as.data.frame(m)
Но в других случаях я должен использовать такой код:
shp = readShapeSpatial("polygons.shp")
win = as(shp,"owin")
Как я знаю, какой синтаксис as
использовать для какого объекта? Или это синтаксис: as.foo(originalObject)
всегда эквивалентно as(originalObject, "foo")
(здесь foo обозначает класс, в который я хочу преобразовать свой объект, чтобы я мог использовать его в функции, требующей, чтобы ее аргумент был foo
учебный класс)
Допустим, я использую пакет в R с классом foo
, И у меня есть переменная v
что принадлежит классу bar
(другими словами, class(v)
является bar
). Как я узнаю, что функция as(v,"foo")
буду работать?
1 ответ
as.data.frame
это метод S3, который вы можете проверить foo
с помощью:
getS3method('as.data.frame','foo')
Но я думаю, что вы ищете (как это прокомментировано)
showMethods(coerce)
Это даст вам список предопределенных функций принуждения.
Чтобы определить вашу принудительную функцию, один вариант (есть много вариантов, таких как setIS
, coerce<-
и неявное принуждение через наследование) является использование setAs
, Вот пример:
track <- setClass("track",
slots = c(x="numeric", y="numeric"))
setAs("track", "numeric", function(from) from@y)
t1 <- new("track", x=1:20, y=(1:20)^2)
as(t1, "numeric")
Теперь, если я проверю, используя:
showMethods(coerce)
Вы получаете запись с:
from="track", to="numeric"
Для лучшего объяснения вы должны прочитать справку ("как"), но тема не очень проста.
РЕДАКТИРОВАТЬ Чтобы показать только записи с треком, вы можете сделать это, например:
cat(grep('track',showMethods(coerce,printTo=FALSE),value=TRUE))
from="track", to="numeric"