我处于这种情况,我需要将数组乘以没有已知的数组编号和数组维度。例如:
demo1 = c(0.45, 0.55)
demo2 = c(0.1, 0.1, 0.15, 0.15, 0.2, 0.05, 0.15, 0.1)
myarr <- array(1:n, dim = c(length(demo1), length(demo2)))
for (p in 1:length(demo1)){
for (q in 1:length(demo2)){
myarr[p,q] <- demo1[p]*demo2[q]
}
}
当我们知道演示数量时,没关系。但我不知道什么时候我不知道演示的数量,仍然需要制作一个长度乘法维数的数组。所以,我可能有demo = 3或4或5的数量,依此类推。如何概括上面for循环中的语句。由于我是R的新手,我将非常感谢您对此的快速帮助。非常感谢提前
答案 0 :(得分:0)
查看?outer
或缩写%o%
以将您的向量相乘:
myarr <- demo1 %o% demo2 %o% demo3 # %o%...
当然,在添加新矢量的情况下,您可以迭代地执行此操作:
myarr <- demo1 %o% demo2
myarr <- myarr %o% demo3
#...
作为附加信息:For
- R中的循环非常慢,如果可以使用 vectorization ,则不应该使用它。
使用矢量化代替循环可以获得大约1000的时间优势:
demo1 <- runif(1000)
demo2 <- runif(1000)
system.time({
myarr <- array(1:n, dim = c(length(demo1), length(demo2)))
for (p in 1:length(demo1)){
for (q in 1:length(demo2)){
myarr[p,q] <- demo1[p]*demo2[q]
}
}
})
#round about 6.8s on my system
system.time(demo1 %o% demo2)
#round about 0.01s on my system