принудительный тип данных класса в R с помощью as
Вопрос
Я понимаю, что в 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 обозначает класс, в который я хочу преобразовать свой объект, чтобы я мог использовать в функции, для которой требуется, чтобы ее аргументом был a foo
класс)
Допустим, я использую пакет в R с классом foo
.И у меня есть переменная v
это относится к классу bar
(другими словами, class(v)
является bar
).Как мне узнать, работает ли функция as(v,"foo")
сработает ли?
Решение
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"