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