【问题标题】:coerce class data type in R with as用 as 强制 R 中的类数据类型
【发布时间】:2014-02-27 18:49:49
【问题描述】:

我知道在 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") 函数是否有效?

【问题讨论】:

  • 从这里开始更好地掌握课程:stackoverflow.com/questions/6583265/…
  • 如果您在showMethods("coerce") 打印的结果中看到from="foo", to="bar" 的条目,您就会知道as(v,"bar") 是否有效。或者检查getMethod(coerce, signature=c(from="bar", to="foo"))是否返回函数。或者只是运行as(v, "bar") 看看它是否有效;)。
  • (有几个 foobar 倒过来了,但你明白了。)

标签: r class object syntax coercion


【解决方案1】:

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"

【讨论】:

  • showMethods(coerce) 几乎就是我想要的。唯一的缺点是列表很长。有没有办法只显示来自showMethods(coerce) 的包含to="bar" 的条目?
  • @jirikadlec2 你可以看到我的编辑。基本上我过滤了 showMethods 输出。
猜你喜欢
  • 1970-01-01
  • 2018-06-23
  • 1970-01-01
  • 2020-08-01
  • 1970-01-01
  • 2023-03-08
  • 1970-01-01
  • 1970-01-01
  • 2017-05-22
相关资源
最近更新 更多