在R中定义另一个函数

时间:2015-01-18 18:22:10

标签: r

findols <- function(x) {
  findol <- function(xrow) {
    mdn <- median(xrow)
    devs <- abs(xrow-mdn)
    return(which.max(devs))
  }
  return(apply(x,1,findol))
}

该函数接受一个矩阵并返回一个向量,其中每个元素对应于距离中位数最远的每一行中的观察值。

问题:我不明白该函数如何知道xrow等于什么。在练习中,使用findsols(x)调用函数,其中x是矩阵。函数如何知道将xrow解释为矩阵的行?

由于

3 个答案:

答案 0 :(得分:2)

这是apply(x,1,findol)正在做的事情:

apply以1作为第二个参数应用一个函数(在您的情况下为findol) 到第一个参数的每一行(在您的情况下为x

因此findols会将 i = 1的行数findol(x[i,])返回到x行数。 Apply还为您处理数据管理并返回包含所有行结果的对象。

有关详细信息,请查看?apply

答案 1 :(得分:0)

xrow是正式的论点。实际参数是x行。

想想apply(x,1,sum) - 这是x行的总和,对吧?你的例子中的想法相同。

您可以通过一个简单的例子证明这一点:

> x <- cbind(rep(1,5), rep(2,5))
> x
     [,1] [,2]
[1,]    1    2
[2,]    1    2
[3,]    1    2
[4,]    1    2
[5,]    1    2
> apply(x, 1, sum)
[1] 3 3 3 3 3
> 

答案 2 :(得分:0)

因为在apply函数中,您实际上是在执行:

return(apply(x, 1, function(whichrow) findol(xrow = whichrow)))

查看?apply做什么