s*****r 发帖数: 223 | 1 刚开始学学了一节R, 不要笑话我问这么初级的问题
x <- matrix(1:6, 2, 3)
x[,2] <- c(7,1)
a <- c(4, 6, 8)
问题1
x[(a>5|x[1,]==2)]
我怎么都不理解这个输出是
[1] 2 7 5 6
我可以理解
a>5|x[1,]==2
[1] FALSE TRUE TRUE
X是matrix
这样X[FALSE TRUE TRUE]为什么就是
[1] 2 7 5 6
问题2
b) x[(a>5|x[1,]==2)[1:2],]
这又是怎么得到
[1] 2 1 6
谢谢 | s******s 发帖数: 13035 | 2 那个logic的vector长度不够,被recycle了
【在 s*****r 的大作中提到】 : 刚开始学学了一节R, 不要笑话我问这么初级的问题 : x <- matrix(1:6, 2, 3) : x[,2] <- c(7,1) : a <- c(4, 6, 8) : 问题1 : x[(a>5|x[1,]==2)] : 我怎么都不理解这个输出是 : [1] 2 7 5 6 : 我可以理解 : a>5|x[1,]==2
| v*******e 发帖数: 11604 | 3
1. x如果当作一个matrix来index的话,需要两个参数,一个行一个列。如果你只提供
一个参数,那么不是把x当作matrix来index的,而是当成一个一维的vector。你求x[c(
FALSE,TRUE,TRUE)]的时候,只有一个参数,所以当成vector来index的,由于x长度是6
,你的index长度是3,所以index是复用的,相当于x[c(c(FALSE,TRUE,TRUE),c(FALSE,
TRUE,TRUE))],这样在x的值c(1,2,7,1,5,6)中选出了第2,3,5,6个,即得到2,7,5,6
2.你用两个参数来index的,第一个是c(FALSE,TRUE),选了第二行;第二个参数是在逗
号后面,没给出,所以缺省是选择所有的列,所以你得到c(2,1,6)
【在 s*****r 的大作中提到】 : 刚开始学学了一节R, 不要笑话我问这么初级的问题 : x <- matrix(1:6, 2, 3) : x[,2] <- c(7,1) : a <- c(4, 6, 8) : 问题1 : x[(a>5|x[1,]==2)] : 我怎么都不理解这个输出是 : [1] 2 7 5 6 : 我可以理解 : a>5|x[1,]==2
| s*****r 发帖数: 223 | 4 万分感谢 verdelite和 shakuras, 这下明白了! |
|