“x []< - as.integer(x)”是什么意思

时间:2013-08-29 03:27:11

标签: r

当我阅读R手册时,我遇到了一些代码如下(从R手册复制'colSums'):

x <- cbind(x1 = 3, x2 = c(4:1, 2:5))
dimnames(x)[[1]] <- letters[1:8]
x[] <- as.integer(x)

有人能告诉我最后一行的目的是什么吗? 谢谢!

2 个答案:

答案 0 :(得分:10)

我的理解是,分配给x[](或者使用方括号分配对象,没有值 - 对于那些搜索此问题的人来说)会覆盖x中的值,同时保留attributes 1 {} x可能有,包括矩阵维度。在这种情况下,记住矩阵几乎只是添加了尺寸的矢量是有帮助的。

所以给...

x <- cbind(x1 = 3, x2 = c(4:1, 2:5))
dimnames(x)[[1]] <- letters[1:8]

attributes(x)
#$dim
#[1] 8 2
#
#$dimnames
#$dimnames[[1]]
#[1] "a" "b" "c" "d" "e" "f" "g" "h"
#
#$dimnames[[2]]
#[1] "x1" "x2"

...这会将尺寸和名称保存为x

中的属性
x[] <- as.integer(x)

虽然这不会......

x <- as.integer(x)

同样的逻辑也适用于矢量:

x <- 1:10
attr(x,"blah") <- "some attribute"

attributes(x)
#$blah
#[1] "some attribute"

所以这保留了你所有可爱的属性:

x[] <- 2:11
x
# [1]  2  3  4  5  6  7  8  9 10 11
#attr(,"blah")
#[1] "some attribute"

然而这不会:

x <- 2:11
x
#[1]  2  3  4  5  6  7  8  9 10 11

答案 1 :(得分:1)

x[] <- as.integer(x)

它将matrix x的内容解析为整数,然后将其作为矩阵存储回x。

x[,] <- as.integer(x)

也有效。但

x <- as.integer(x)

将失去矩阵结构。