我正在最大化似然函数并尝试减少循环。
我想将向量(要估计的参数)添加到矩阵(数据)的所有行。向量的长度等于矩阵的列。
a+b
会给出错误的结果,因为R的循环规则是按列而不是行。
a<-c(1,2,0,0,0) # parameters to be optimized
b<-matrix(1,ncol=5,nrow=6) # data
t(a+t(b)) # my code would work, anything more intuitive?
所需输出
[,1] [,2] [,3] [,4] [,5]
[1,] 2 3 1 1 1
[2,] 2 3 1 1 1
[3,] 2 3 1 1 1
[4,] 2 3 1 1 1
[5,] 2 3 1 1 1
[6,] 2 3 1 1 1
错误输出
a+b
[,1] [,2] [,3] [,4] [,5]
[1,] 2 3 1 1 1
[2,] 3 1 1 1 2
[3,] 1 1 1 2 3
[4,] 1 1 2 3 1
[5,] 1 2 3 1 1
[6,] 2 3 1 1 1
答案 0 :(得分:8)
我们可以使用09-11 23:46:35.346 32708-32708/com.xxxxxxx.xxxxxxxx A/libc: Fatal signal 11
(SIGSEGV), code 1, fault addr 0x28 in tid 32708 (jumblednameofapplicationclass)
来复制'a'元素
col
或者更快的选择是使用b + a[col(b)]
# [,1] [,2] [,3] [,4] [,5]
#[1,] 2 3 1 1 1
#[2,] 2 3 1 1 1
#[3,] 2 3 1 1 1
#[4,] 2 3 1 1 1
#[5,] 2 3 1 1 1
#[6,] 2 3 1 1 1
rep
或使用b + rep(a, each = nrow(b))
sweep
sweep(b, 2, a, "+")
答案 1 :(得分:0)
使用outer()
或collapse::TRA()
的{{3}}解决方案比使用rep
或sweep
的解决方案快得多。