3

我知道在 R 中有一些基本数据类型vector, matrix, list, data.frame(特殊类型的。pppowinspatialPointsDataFrame

我需要解释 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 中使用带有 class 的包foo。而且我有一个v属于 class的变量bar(换句话说,class(v)is bar)。我如何知道该功能as(v,"foo")是否有效?

4

1 回答 1

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")但主题不是很简单。

编辑要仅显示带有 track 的条目,您可以这样做,例如:

cat(grep('track',showMethods(coerce,printTo=FALSE),value=TRUE))
from="track", to="numeric"
于 2014-02-27T19:25:35.773 回答