R 以下任务的矢量化方法
下面的代码可以正常工作,但正如预期的那样,对于大型向量执行起来需要很长时间 完成相同任务的矢量化方法是什么:R 以下任务的矢量化方法,r,dplyr,vectorization,tidyverse,R,Dplyr,Vectorization,Tidyverse,下面的代码可以正常工作,但正如预期的那样,对于大型向量执行起来需要很长时间 完成相同任务的矢量化方法是什么: x <- seq(0,10,0.01) y <- seq(0,10,0.01) df <- data.frame(vector1 = rnorm(10000), vector2 = rnorm(10000), vector3 = rnorm(10000)) m.out <- matrix(nrow=length(x),ncol = length(y)) a
x <- seq(0,10,0.01)
y <- seq(0,10,0.01)
df <- data.frame(vector1 = rnorm(10000), vector2 = rnorm(10000), vector3 = rnorm(10000))
m.out <- matrix(nrow=length(x),ncol = length(y))
a <- df$vector1
b <- df$vector2
c <- df$vector3
for (i in 1:length(x)){
for(j in 1:length(y)){
m.out[i,j] <- cor((x[i]*a + y[j]*b),c,use="complete.obs",method = "pearson")
}
}
谢谢,请参阅下面的矢量化版本,您可以使用mapply和expand.grid。要返回到宽数据集格式,可以使用重塑2包的dcast,但仍需要一些时间:
set.seed(123)
x <- seq(0, 10, 0.01)
y <- seq(0, 10, 0.01)
# simulation
df <- data.frame(vector1 = rnorm(length(x)), vector2 = rnorm(length(x)), vector3 = rnorm(length(x)))
a <- df$vector1
b <- df$vector2
c <- df$vector3
v <- expand.grid(x, y)
v$out <- mapply(function(n, m) cor(n * a + m * b, c, use = "complete.obs", method = "pearson"), v[, 1], v[, 2])
library(reshape2)
z <- dcast(v, Var1 ~ Var2)
rownames(z) <- z$Var1
z <- z[, -1]
head(z[, 1:5])
你的例子不起作用,你能修正它吗?有种子和数据大小也很好。df在哪里???@PoGibas哪里需要种子?没有df,它是如何生成的?它有多大?这似乎就是你想要的???谢谢你的回复@Artem;然而,经过一些基准测试后,我最初的方法所用的时间与您的版本大致相同。干杯
0 0.01 0.02 0.03 0.04
0 NA 0.0140699293 0.0140699293 0.0140699293 0.0140699293
0.01 -0.01383734 0.0003350528 0.0065542508 0.0090938390 0.0103897953
0.02 -0.01383734 -0.0059841841 0.0003350528 0.0042062076 0.0065542508
0.03 -0.01383734 -0.0086178379 -0.0035752709 0.0003350528 0.0031310581
0.04 -0.01383734 -0.0099713568 -0.0059841841 -0.0024814273 0.0003350528
0.05 -0.01383734 -0.0107798236 -0.0075458061 -0.0045052606 -0.0018627055