【发布时间】:2015-10-17 12:32:15
【问题描述】:
我正在使用普通的 for 循环执行一项任务。我认为它可以通过 apply 功能之一来完成,但找不到方法。如果可以将 apply 应用于该问题或者是否有更有效的解决方法,您能否请教? 我知道我可以制作 udf 和 do.call() 但我认为它与 for 循环相同。
问题: 我有两个矩阵a和b,都是(m x n)和一个长度为n的向量。我想创建第三个矩阵 (m x n),它将根据向量的值从 a 或 b 接收列。
例如:
a=
[0, 0, 0, 0]
[0, 0, 0, 0]
[0, 0, 0, 0]
[0, 0, 0, 0]
b=
[1, 1, 1, 1]
[1, 1, 1, 1]
[1, 1, 1, 1]
[1, 1, 1, 1]
x=
[-1, -1, 1, 1]
如果 x[k] 为 -1,c 接收来自 a 的列,如果 x[k] 为 1,则 c 接收来自 b 的列,产生:
c=
[0, 0, 1, 0]
[0, 0, 1, 0]
[0, 0, 1, 0]
[0, 0, 1, 0]
可重现的例子:
a <- matrix(rep(0, 16), nrow = 4, ncol = 4)
b <- matrix(rep(1, 16), nrow = 4, ncol = 4)
x <- c(-1,-1, 1,-1)
c <- matrix(NA, nrow = 4, ncol = 4)
for (i in 1:length(x)){
if (x[[i]] < 0){
c[,i] <- a[,i]
} else {
c[,i] <- b[,i]
}
}
有没有更有效的解决方案?
问候,
P.
【问题讨论】:
标签: r