我有这种形式的双循环:
for (j in 1:col(mat))
{
for (i in 1:nrow(mat))
{
decision[i][j] = ifelse(mat[i][j] > 3, 1, 0)
}
}
是否有任何方法可以通过其中一个应用功能以显着提高的速度实现此功能?
答案 0 :(得分:2)
你不需要任何循环。如果您创建一个看起来像这样的矩阵
mat<-matrix(sample(1:10, 5*7, replace=T), ncol=7)
# [,1] [,2] [,3] [,4] [,5] [,6] [,7]
#[1,] 9 6 10 7 6 10 6
#[2,] 7 6 3 3 6 8 3
#[3,] 7 9 7 5 6 7 6
#[4,] 2 3 8 6 10 1 5
#[5,] 4 1 5 6 1 10 6
然后你可以做
decision <- (mat>3)+0
decision;
# [,1] [,2] [,3] [,4] [,5] [,6] [,7]
#[1,] 1 1 1 1 1 1 1
#[2,] 1 1 0 0 1 1 0
#[3,] 1 1 1 1 1 1 1
#[4,] 0 0 1 1 1 0 1
#[5,] 1 0 1 1 0 1 1
答案 1 :(得分:1)
R是一种矢量化语言,因此对于矩阵apply
的这种简单操作不需要类型函数,只需这样做:
decision <- ifelse(mat > 3, 1, 0)
(我假设你想迭代矩阵的元素,这意味着你会在你的循环中说ncol(mat)
; col
会给出一些不同的东西。)