mat*_*fee 5 r vector matrix subset
我想知道是否有R语法从矩阵中提取列并且返回的向量上始终没有name属性(我希望依赖于此行为).
我的问题是以下不一致:
myMatrix[, 1]我会得到第一列myMatrix没有name属性.这就是我要的.myMatrix[, 1],我会得到第一列,myMatrix 但它有第一个colname作为它的名字.我希望能够做到myMatrix[, 1]并且始终如一地得到没有名字的东西.
举例说明:
# make a matrix with more than one row,
x <- matrix(1:2, nrow=2)
colnames(x) <- 'foo'
# foo
# [1,] 1
# [2,] 2
# extract first column. Note no 'foo' name is attached.
x[, 1]
# [1] 1 2
# now suppose x has just one row (and is a matrix)
x <- x[1, , drop=F]
# extract first column
x[, 1]
# foo # <-- we keep the name!!
# 1
Run Code Online (Sandbox Code Playgroud)
现在,[(?'[')的文档提到了这种行为,所以它不是一个bug或任何东西(虽然,为什么?!为什么这种不一致?!):
通过矩阵索引获得的向量将是未命名的,除非当行名称(如果有的话)被索引以提供结果的名称时,'x'是一维的.
我的问题是,有没有办法这样做x[, 1],结果 总是未命名,哪里x是矩阵?
是我唯一的希望unname(x[, 1])或者是有什么类似[的drop说法?或者有一个选项,我可以设置说"永远不知名"?我可以使用的一些技巧([当提取的结果是向量时,以某种方式覆盖的行为?)
更新为什么下面的代码有效(据我所知)
使用中[R 源文件中包含的函数来处理子集化。当使用矩阵索引来子集矩阵时,将调用该函数。当使用多个索引时(即,行和列各一个,如 中所示),则调用 then 。subset.c~/src/mainVectorSubsetx[,1]MatrixSubset
该函数VectorSubset仅将名称分配给被子集化的一维数组。由于矩阵是二维数组,因此在使用矩阵索引时不会为结果分配任何名称。然而,该函数MatrixSubset确实会在某些情况下尝试传递暗名称。
因此,您在帮助页面的引用中引用的矩阵索引似乎是关键:
x <- matrix(1)
colnames(x) <- "foo"
x[, 1] ## 'Normal' indexing
# foo
# 1
x[matrix(c(1, 1), ncol = 2)] ## Matrix indexing
# [1] 1
Run Code Online (Sandbox Code Playgroud)
并使用更宽的 1 行矩阵:
xx <- matrix(1:10, nrow = 1)
colnames(xx) <- sprintf('foo%i', seq_len(ncol(xx)))
xx[, 6] ## 'Normal' indexing
# foo6
# 6
xx[matrix(c(1, 6), ncol = 2)] ## Matrix indexing
# [1] 6
Run Code Online (Sandbox Code Playgroud)
对于两个维度都 > 1 的矩阵:
yy <- matrix(1:10, nrow = 2, dimnames = list(NULL,
sprintf('foo%i', 1:5)))
yy[cbind(seq_len(nrow(yy)), 3)] ## Matrix indexing
# [1] 5 6
Run Code Online (Sandbox Code Playgroud)