“如。”在R中数据类型之间转换的函数名称中

时间:2014-04-24 23:23:14

标签: r

as.matrix会将数据框转换为矩阵。 as.data.frame将进行相反的转换。

ts会将矢量,矩阵或数据帧转换为时间序列对象。

所以我想知道为什么as.会出现在某些功能中。名字,而不是其他?谢谢!

2 个答案:

答案 0 :(得分:3)

根据蒂姆的评论请求......

一般来说

  • matrixts(与class-like-name的其他功能一样)是 从头开始创建对象时使用(例如data.frame 来自一组向量,来自指定dims的向量的matrix
  • as.matrixas.ts(与as.classname之类的其他功能一样) 用于强制给定类的对象classname

matrixas.matrix非常符合一般规则。

matrix在创建对象方面非常有效 刮。你可以看到,经过一些操作,它调用低 级别代码(通过.Internal)提供正确的数据 结构

> matrix
function (data = NA, nrow = 1, ncol = 1, byrow = FALSE, dimnames = NULL)
{
    if (is.object(data) || !is.atomic(data))
        data <- as.vector(data)
    .Internal(matrix(data, nrow, ncol, byrow, dimnames, missing(nrow), missing(ncol)))
}

as.*功能目标(例如as.matrix的一个)完全不同,因为他们必须应对 具有不同/复杂的数据结构,所有都被强制转换为所考虑的。 因此有些更高级功能(主要是纯R)

> as.matrix
function (x, ...)
UseMethod("as.matrix")
<bytecode: 0x3a5a2f0>
<environment: namespace:base>

哪些对象可以转换为矩阵?

> methods(as.matrix)
[1] as.matrix.data.frame as.matrix.default
[3] as.matrix.dist*      as.matrix.ftable*
[5] as.matrix.noquote    as.matrix.POSIXlt
[7] as.matrix.raster*

   Non-visible functions are asterisked

从控制台尝试

as.matrix.data.frame
as.matrix.ftable
getAnywhere(as.matrix.ftable)

HTH:)

答案 1 :(得分:2)

命名函数as.new_class_name是S3函数调度机制的一部分。如果要定义新类和函数以向该类提供强制,那么您可以创建as.new_class_name函数并使用setClass进行注册。请参阅以下示例:

 ?setAs
 ?setClass

然后,解释器能够在遇到此类呼叫时正确发送到as.new_class_name(假设您已定义它)。