在R中强制类数据类型为as

时间:2014-02-27 18:49:49

标签: r class object syntax coercion

我理解在R中你有一些基本数据类型(vector, matrix, list, data.frame),然后在R包中你有一些称为S3-class或S4-class(ppp,{{1}的高级类型R}包中的一些函数只能使用特殊类型的参数。

。},owin和许多其他函数。

我需要解释在R中的不同类和数据类型之间进行转换:

有时我可以使用如下代码:

spatialPointsDataFrame

但在其他情况下,我必须使用如下代码:

m = c(1, 2, 3, 4)
df = as.data.frame(m)

我如何知道shp = readShapeSpatial("polygons.shp") win = as(shp,"owin") 的哪个语法用于哪个对象? 或者是语法:as总是等同于as.foo(originalObject)(这里foo代表我想要将对象转换为的类,以便我可以在需要其参数的函数中使用{{1} 1}} class)

假设我在R中使用了一个类as(originalObject, "foo")的包。我有一个属于foo类的变量foo(换句话说,vbar)。我怎么知道函数class(v)是否有效?

1 个答案:

答案 0 :(得分:3)

as.data.frame是一种S3方法,您可以使用以下方法检查foo

getS3method('as.data.frame','foo')

但我认为你正在寻找(因为它被评论)

showMethods(coerce)

这将为您提供预定义的强制功能列表。

要定义强制函数,一个选项(有很多选项,如setIScoerce<-和隐式强制通过继承)是使用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"

为了更好的解释,你应该阅读 help(“as”),但主题不是很简单。

编辑要仅显示包含曲目的条目,您可以执行此操作,例如:

cat(grep('track',showMethods(coerce,printTo=FALSE),value=TRUE))
from="track", to="numeric"