我需要取两个向量的任意两个元素之间的差别。如果是A<-c(1,2)和B<-c(3,4),那么我的结果R应该是c(3-1,3-2,4-1,4-2)。
用这个片段
myfunction <- function(N)
{
A = runif(N)
B = runif(N)
R = c()
for(a in A){
for(b in B){
R=c(b-a,R)
}
}
R
}
print(system.time(result <- myfunction(300)))我知道这一次
user system elapsed
14.27 0.01 14.39 有什么更快的方法吗?
发布于 2017-07-13 10:25:38
您可以使用expand.grid对方法进行矢量化:
A <- runif(300)
B <- runif(300)
library(dplyr)
R <- as.data.frame(expand.grid(A,B)) %>%
mutate(Var3 = Var2-Var1) 前5项产出如下:
Var1 Var2 Var3
1 0.8516676 0.325261 -0.5264066246
2 0.2126453 0.325261 0.1126156694
3 0.5394620 0.325261 -0.2142010126
4 0.1364876 0.325261 0.1887734290
5 0.3248651 0.325261 0.0003958747 这需要:
user system elapsed
0.02 0.00 0.02你的职责是:
user system elapsed
42.39 0.43 42.90 发布于 2017-07-13 10:25:10
使用purrr::map2
library(tidyverse)
N = 300
A = runif(N)
B = runif(N)
R = c()
print(
system.time(
result <- map(
.x = A,
.f = ~ c(.x - B)) %>% unlist
)
)所需时间:
user system elapsed
0.02 0 0.02 如果我现在引起了你的注意,请到这个回购那里去看看purrr。
https://stackoverflow.com/questions/45077747
复制相似问题