Приведение типа данных класса в 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"
Другие вопросы по тегам