我想运行一个xtsmatrix的所有时期的函数。 apply()非常快,但返回的matrix与原始对象相比具有转置的维度: > dim(myxts) [1] 7429 48 > myxts.2 = apply(myxts, 1 , function(x) { return(x) }) > dim(myxts.2) [1] 48 7429 > str(myxts) An 'xts' object from 2012-01-03 09:30:00 to 2012-01-30 16:00:00 containing: Data: num [1:7429, 1:48] 4092500 4098500 4091500 4090300 4095200 … – attr(*, "dimnames")=List of 2 ..$ : NULL ..$ : chr […]
我经常需要对数据框/matrix中的每对列应用函数,并将结果以matrixforms返回。 现在我总是写一个循环来做到这一点。 例如,要创build一个包含相关p值的matrix,我写: df <- data.frame(x=rnorm(100),y=rnorm(100),z=rnorm(100)) n <- ncol(df) foo <- matrix(0,n,n) for ( i in 1:n) { for (j in i:n) { foo[i,j] <- cor.test(df[,i],df[,j])$p.value } } foo[lower.tri(foo)] <- t(foo)[lower.tri(foo)] foo [,1] [,2] [,3] [1,] 0.0000000 0.7215071 0.5651266 [2,] 0.7215071 0.0000000 0.9019746 [3,] 0.5651266 0.9019746 0.0000000 哪个起作用,但是对于非常大的matrix非常缓慢。 我可以在R中为此写一个函数(不要因为假设上面的对称结果而把切割时间减半): Papply <- function(x,fun) { n <- […]