使用 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"
不隶属于 StackOverflow