作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想知道是否有 R 语法可以从矩阵中提取一列,并且在返回的向量上始终没有 name 属性(我希望依赖于这种行为)。
我的问题是以下不一致:
myMatrix[, 1]
我会得到myMatrix
的第一列没有名称属性。这就是我要的。 myMatrix[, 1]
,我会得到myMatrix
的第一列但它的名字是第一个列名 . 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
[
的文档(
?'['
) 提到了这种行为,所以它不是错误或任何东西(尽管,为什么?!为什么会出现这种不一致?!):
A vector obtained by matrix indexing will be unnamed unless ‘x’ is one-dimensional when the row names (if any) will be indexed to provide names for the result.
x[, 1]
这样结果总是未命名的,其中
x
是矩阵?
unname(x[, 1])
或者是否有类似于
[
的东西的
drop
争论?或者是否有一个选项我可以设置为“始终未命名”?我可以使用的一些技巧(以某种方式覆盖
[
当提取的结果是向量时的行为?)
最佳答案
更新为什么下面的代码有效 (据我所知)
使用 [
进行子集化使用包含在 R 源文件中的函数处理 subset.c
在 ~/src/main
.当使用矩阵索引对矩阵进行子集化时,函数 VectorSubset
叫做。当使用多个索引时(即,行和列各一个,如 x[,1]
),则 MatrixSubset
叫做。
函数VectorSubset
仅将名称分配给子集化的一维数组。由于矩阵是二维数组,因此在使用矩阵索引时不会为结果分配名称。函数MatrixSubset
但是,在某些情况下确实会尝试传递dimnames。
因此,您在帮助页面的引用中引用的矩阵索引似乎是关键:
x <- matrix(1)
colnames(x) <- "foo"
x[, 1] ## 'Normal' indexing
# foo
# 1
x[matrix(c(1, 1), ncol = 2)] ## Matrix indexing
# [1] 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
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
关于r - 始终将子集矩阵转换为向量并避免使用列名?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15215355/
我是一名优秀的程序员,十分优秀!