我有一个矩阵:
x <- cbind(x1 = 3, x2 = c(4:1, 2:5))
dimnames(x)[[1]] <- letters[1:8]
以下代码如何运作?
cave <- function(x, c1, c2) c(mean(x[c1]), mean(x[c2]))
apply(x,1, cave, c1="x1", c2=c("x1","x2"))
特别是我不理解函数c(mean(x[c1]), mean(x[c2]))
中的参数cave
。
我们也以这种方式调用函数cave(x,a,b)
。但是在apply
函数内部,当我们调用cave
函数时输入是什么?
答案 0 :(得分:2)
定义函数时,会隐式返回列出的最后一项。因此,当您将cave
定义为
cave <- function(x, c1, c2) {
c(mean(x[c1]), mean(x[c2]))
}
这与
相同cave <- function(x, c1, c2) {
return(c(mean(x[c1]), mean(x[c2])))
}
在R中,通过使用c()
连接元素来定义向量。因此c(a, b)
使用元素a
和b
生成长度为2的向量。在这种情况下,a
是x
给出的索引处的输入c1
的平均值,而b
是指数的x
的平均值c2
。
当你{1}}对{1}}这个函数超过维度1时,你在apply()
的每一行都计算x
。
cave()
的语法如下:
x
将apply()
应用于第一行,为我们提供了一个向量,其中包含apply(x, # object input to the function
1, # dimension of x over which to apply the function, 1=rows, 2=columns
cave, # function to apply
c1="x1", c2=c("x1", "x2") # any further arguments to the function
)
的平均值(仅cave()
,因为它是单个数字的平均值)和x1
和x1
的平均值。 3的平均值为3,3和4的平均值为3.5,因此输出为x1
。
我们对x2
中的每一行重复一遍,最后我们得到这个:
c(3, 3.5)
您可以看到x
列对应 a b c d e f g h
[1,] 3.0 3 3.0 3 3.0 3 3.0 3
[2,] 3.5 3 2.5 2 2.5 3 3.5 4
行a
上的cave()
,依此类推。