【发布时间】:2017-09-21 09:03:39
【问题描述】:
我真的可以想象,答案可以在 stackoverflow 上找到,但我不明白。所以这是我的问题:
我有一个 data.frame “tmp”,它由 17 列和许多行组成。 我想要做的是使用apply函数逐行使用来自tmp的信息的近似函数:
tmp[,17] <- apply(tmp[,4:16], 1, approx, y = y, x = tmp[,2])
其中 y 是固定的。
我的问题是,我现在得到了一个 n x n 矩阵,因为 apply 函数计算了每对 tmp[,4:16] 和 tmp[,2]。我需要的只是对角线,即
(tmp[1,4:16], tmp[1,2]), (tmp[2,4:16], tmp[2,2]), (tmp[3,4:16], tmp[3,2]),...
我想避免像diag(apply(...)) 这样的事情或循环,因为我想减少计算时间。
希望有人能帮助我,在此先谢谢你
【问题讨论】:
-
这可能吗?
approx(tmp[1,4:16], tmp[1,2])抛出Error in xy.coords(x, y, setLab = FALSE) : 'x' and 'y' lengths differ. -
您需要 approx 函数中的节点:
approx(y,tmp[1,4:16],tmp[1,2] )其中 y 的长度与 tmp[1,4:16] 相同。在我的应用函数中,我扭曲了y和tmp[,4:16],并编写了一个新的近似函数,在其中我以正确的顺序将向量完全放入tmp[,17] <- apply(tmp[,4:16], 1, approx2, y = y, x = tmp[,2])和approx2 <- function(tmp,y,tmp2){approx(y,tmp,tmp2)[[2]] }