我想知道是否可以在R中使用适用系列并回归输入。 说我有:R中的动态输入适用
apply(MyMatrix,1,MyFunc,MyMatrix)
我知道,申请基本上是一个循环,所以在上面的例子中它可以运行的MyFunc
一个迭代超过MyMatrix
第一行修改MyMatrix
全球范围内,然后选择该修改的MyMatrix
下一次迭代?我意识到可以在这里使用正常的循环,但我只是想知道是否有办法像这样做。
谢谢
我想知道是否可以在R中使用适用系列并回归输入。 说我有:R中的动态输入适用
apply(MyMatrix,1,MyFunc,MyMatrix)
我知道,申请基本上是一个循环,所以在上面的例子中它可以运行的MyFunc
一个迭代超过MyMatrix
第一行修改MyMatrix
全球范围内,然后选择该修改的MyMatrix
下一次迭代?我意识到可以在这里使用正常的循环,但我只是想知道是否有办法像这样做。
谢谢
我不这么认为。即使修改全球范围内的MyMatrix
也不会更改传递到您的功能的MyMatrix
。 R函数不会这样操作。当你的对象被传入一个函数并且它的一个新实例存在时,它实际上会被复制。这不是通过参考完成的。
不幸的是,*apply
功能家族能够以这种方式工作。 (这有时是一个挫折对我好,但我是来欣赏和使用它。)
有两个障碍是:
的*apply
家庭功能的交易在调用时调用MyMatrix
的值,遍历行(在本例中),然后加入结果(基于每个输出的维数)。它不会每次重新评估。
即使它重新评估它,MyFunc
一次只给出一行(在本例中),而不是整个矩阵。 (你的第二个参考MyMatrix
出现这个问题,才能奏效。)
做什么,我觉得你说的,那么你的MyFunc
功能需要接受作为参数的整个矩阵和行上你操作,并在问题刚刚返回的行,鼻翼:
MyFunc <- function(rownum, mtx) {
# ...
mtx[rownum,]
}
使用的前提下,你可以这样做:
for (rr in seq.int(nrow(MyMatrix))) {
MyMatrix[rr,] <- MyFunc(rr, MyMatrix)
}
,或者,如果你必须留与*apply
家庭:
MyMatrix.new <- sapply(seq.int(nrow(MyMatrix)), MyFunc, MyMatrix)
你可能想从这里sapply()
回归的转置(t()
)。
如果MyFunc
返回整个矩阵而不是只有一行,这可以做一点不同。
我知道没有办法直接做你的建议。
这就是我的想法。我期待完全避免循环,但现在我发现应用只是另一个循环,我不会真的获得任何效率。谢谢你的时间 ! – Pane