2017-10-10 3 views
0

J'essaie de combiner des matrices qui sont sorties par une boucle pour toutes les variables à l'intérieur d'une fonction dans R? disons que j'ai 179=length(b) variables, et chaque variable donne une matrice a 2000 rows=nrow(data.test) et 28 columns=length(x2). La matrice finale devrait avoir rows=nrow(data.test) fois length(x2) * (ncol(data.test)-1) J'ai essayé pour la boucle comme suit, mais les valeurs ne conservaient pas dans la dernière matricecomment combiner les matrices qui sont sorties par la boucle for en r

MyFunction <- function(data.train,x2,no.sample,data.test) 
{ pre_var = matrix(,nrow = nrow(data.test), ncol = length(x2) * (ncol(data.test)-1)) 
for(b in 1:(ncol(data.test)-1)) 
{ false= NULL ; true=NULL 
    pred_test = matrix(,nrow = nrow(data.test), ncol = length(x2)) 
    for(w in 1:length(x2)) 
    { ## there are some lines here to produce false and true values 

    pred_test[,w] = as.numeric(ifelse(data.test[,b] > x2[w] 
             ,true[w] ,false[w]))} 
    pre_var = cbind(pre_var,pred_test) 
} 
results = NULL 
results = pre_var 
} 
+0

Peut-être que vous pouvez essayer de le mettre dans une liste d'abord ... puis d'exécuter cbind. Peut-être que cela vous permet de le déboguer plus facilement – zwep

+0

Voulez-vous dire comme ceci pre_var = liste (cbind (pre_var, pred_test) signifie comme ça) – Amani

+0

@Amani Êtes-vous sûr de la logique? 'true <- NULL; true [5] '(le reult est toujours' NULL') – jogo

Répondre

0

Soit est pour des raisons de simplicité suppose que ceci est une matrice d'un de vos résultats

A = matrix(runif(9),ncol=3) 

Ce que vous voulez faire, c'est de les mettre dans une liste en premier. Dans ce contexte, je répète simplement ma matrice d'origine. Dans votre cas, vous générez bien sûr vos matrices

A_list = rep(list(A),5) 

L'étape suivante consiste à les assembler. Ici, nous avons un simple cbind-forloop.

n <- length(A_list) 
res <- NULL 
for(i in seq(n)){ 
    res <- cbind(res, A_list[[i]]) 
} 
res 

Et Voila, je pense que c'est ce que vous vouliez.

+0

Ça a très bien fonctionné, merci @zwep – Amani