as.matrix
会将数据框转换为矩阵。 as.data.frame
将进行相反的转换。
ts
会将矢量,矩阵或数据帧转换为时间序列对象。
所以我想知道为什么as.
会出现在某些功能中。名字,而不是其他?谢谢!
答案 0 :(得分:3)
根据蒂姆的评论请求......
一般来说
matrix
和ts
(与class-like-name
的其他功能一样)是
从头开始创建对象时使用(例如data.frame
来自一组向量,来自指定dims的向量的matrix
。as.matrix
和as.ts
(与as.classname
之类的其他功能一样)
用于强制给定类的对象classname
。 matrix
和as.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
(假设您已定义它)。