【发布时间】:2018-07-31 20:27:57
【问题描述】:
我有以下矩阵:
mat <- matrix(data = c(0.2 , 0.1, 0.2 ,0.4 , 0.1, 0.2, 0.5, 0.3, 0.5), nrow = 3,
ncol=3, byrow = TRUE)
colnames(mat) <- c("x","y","z")
我正在使用此过滤器根据列 y 和 z 过滤其内容,同时我只需要其中的一行(无论哪个),因此我将采用第一行。
一旦我将 0.1 用于 y 和 0.2 用于 z:
mat[ which( mat[,"y"] == 0.1 & mat[,"z"] == 0.2 ), ] [1,]
一切都按预期工作并返回:
x y z
0.2 0.1 0.2
另一方面,如果我使用 0.3 表示 y 并使用 0.5 表示 z
mat[ which( mat[,"y"] == 0.3 & mat[,"z"] == 0.5 ), ] [1,]
我收到以下错误:
mat[which(mat[, "y"] == 0.3 & mat[, "z"] == 0.5), ][1, ] 中的错误: 维数不正确
这可能是因为第一个过滤返回一个包含两行的矩阵,而第二个过滤不返回矩阵,而只返回一个向量(只有一行的 y=0.3 和 z=0.5)。
有没有什么办法可以超越这一点并且能够编写一些代码而无需先检查过滤的返回是一个矩阵(所以使用 [1,])还是一个向量?
【问题讨论】: