将排序应用于矩阵I
的列后,向量s
的作用是什么?
n = 10
I = c(2, 8)
s = matrix(runif(n*20), nrow=20)
M = apply(s, 2, sort)[I,]
我们可以用另一种方法编写这段代码吗?
答案 0 :(得分:3)
R的幂是索引向量或数组,而不是单个值,而是向量。假设以下示例:
foo = 5:10 # foo = 5 6 7 8 9 10
foo[3] # 7
foo[1:3] # 5 6 7
foo[-2] # excluding the 2nd item -> 5 7 8 9 10
现在在阵列上:
bar = data.frame(1:3, 4:6)
bar[,2] # The 2nd column: 4 5 6
bar[-1,] # Excluding the first row
bar[c(2,3),] # Extracts the second and third rows
在原始示例中,apply(s, 2, sort)
对矩阵s
的每一列进行排序(如果您使用apply(s, 1, sort)
它会对行进行排序),然后[I,]
限制结果上一个命令只到第2行和第8行。因此,在此程序之后,s
的每列中只有第2和第8个最小项。
请注意,I
在R中可能有不同的含义。在您的情况下,它只是一个变量名称,它可能是其他任何名称。但是I(x)
也是R中的一个函数。有关详细信息,您可以使用?I
。