R:调用函数

时间:2015-04-22 15:24:09

标签: r

我有一个矩阵:

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函数时输入是什么?

1 个答案:

答案 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)使用元素ab生成长度为2的向量。在这种情况下,ax给出的索引处的输入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(),因为它是单个数字的平均值)和x1x1的平均值。 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(),依此类推。