as를 사용하여 R의 강제 클래스 데이터 유형
문제
나는 R에 몇 가지 기본 데이터 유형(vector, matrix, list, data.frame
) 그리고 R 패키지에는 S3 클래스 또는 S4 클래스(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")
작동할까요?
해결책
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"