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解释为矩阵的行?
由于
答案 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
做什么