当我阅读R手册时,我遇到了一些代码如下(从R手册复制'colSums'):
x <- cbind(x1 = 3, x2 = c(4:1, 2:5))
dimnames(x)[[1]] <- letters[1:8]
x[] <- as.integer(x)
有人能告诉我最后一行的目的是什么吗? 谢谢!
答案 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)
将失去矩阵结构。