2014-05-10 47 views
0

我有一个双循环形式如下:申请家庭的功能中的R

for (j in 1:col(mat)) 
{ 
    for (i in 1:nrow(mat)) 
    { 
     decision[i][j] = ifelse(mat[i][j] > 3, 1, 0) 
    } 
} 

是否有此功能可通过与显著提高速度的应用功能之一来实现什么办法?

+0

此外,要访问一个'matrix'(或'data.frame')的第i行第j列在R中,你需要执行'[i,j]'而不是'[i] [j]'。 –

回答

1

R是一个量化的语言,所以不需要这种类型的矩阵apply型功能操作简单的,只是做:

decision <- ifelse(mat > 3, 1, 0) 

(我假设你想通过的元素进行迭代矩阵,这意味着你会在你的循环中说ncol(mat); col给出了一些相当不同的东西)。

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 
+4

为了澄清,为了将“TRUE”和“FALSE”的逻辑结果更改为数字('+ 0',请尝试使用'+ 0'),可以使用'+ 0'。 – John

+0

谢谢@约翰,这对我来说是新的。非常精通 –