📅  最后修改于: 2023-12-03 15:34:35.644000             🧑  作者: Mango
which()
是在R语言中常用的函数之一,其作用是找出符合给定条件的元素的下标位置。以下是该函数的语法和参数:
which(x, arr.ind = FALSE, useNames = TRUE)
x
:需要查找的向量、矩阵或数组。arr.ind
:逻辑参数,若为TRUE,则返回下标的行列形式;若为FALSE,则返回下标的向量形式。useNames
:逻辑参数,若为TRUE,则返回的下标带有names属性,可以直接用来访问原向量、矩阵或数组。若为FALSE,则不带有names属性,需要手动将下标应用到相应的对象上。下面是一些实际的例子。
x <- c(1, 3, 5, 7, 9)
which(x > 5)
输出结果为:
[1] 4 5
这意味着向量x中第4个和第5个元素大于5。
m <- matrix(c(1, 2, 3, 4, 5, 6), nrow = 2, ncol = 3)
which(m %% 2 == 0, arr.ind = TRUE)
输出结果为:
row col
[1,] 1 2
[2,] 2 1
[3,] 1 3
这意味着矩阵m中第1行第2列、第2行第1列和第1行第3列的元素为偶数。
a <- array(1:24, dim = c(2, 3, 4))
which(a %% 3 == 0, arr.ind = TRUE, useNames = FALSE)
输出结果为:
dim1 dim2 dim3
[1,] 1 2 2
[2,] 1 3 2
[3,] 2 1 3
[4,] 1 2 4
[5,] 1 3 4
[6,] 2 1 1
[7,] 1 2 3
[8,] 1 3 3
[9,] 2 1 2
[10,] 1 2 1
[11,] 1 3 1
[12,] 2 1 4
这意味着数组a中有12个元素可以被3整除,它们的下标分别为:
[1] "(1,2,2)" "(1,3,2)" "(2,1,3)" "(1,2,4)" "(1,3,4)" "(2,1,1)"
[7] "(1,2,3)" "(1,3,3)" "(2,1,2)" "(1,2,1)" "(1,3,1)" "(2,1,4)"
由于此时useNames参数为FALSE,因此上述下标需要手动应用于a数组。
综上,which()
函数在R中有着广泛的应用,可以快速地查找符合条件的元素下标,节省程序员的时间和精力。