2017-07-19 5 views
2

Ich lerne R und versuche, es für eine statistische Analyse zur gleichen Zeit zu verwenden. Hier bin ich im ersten Teil der Arbeit: Ich schreibe Matrizen und mache ein paar einfache Dinge mit ihnen, um später mit diesen zu arbeiten.For-Schleife mit Strings verwenden

punti<-c(0,1,2,4) 
t1<-matrix(c(-8,36,-8,-20,51,-17,-17,-17,57,-19,-19,-19,35,-8,-19,-8,0,0,0,0,-20,-20,-20,60, 
     -8,-8,-28,44,-8,-8,39,-23,-8,-19,35,-8,57,-8,-41,-8,-8,55,-8,-39,-8,-8,41,-25, 
     0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),ncol=4,byrow=T) 
colnames(t1) <- c("20","1","28","19") 
r1<-matrix(c(12,1,19,9,20,20,11,20,20,11,20,28,0,0,0,12,19,19,20,19,28,15,28,19,11,28,1, 
     33,20,28,31,1,19,17,28,19,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA),ncol=3,byrow=T) 
pt1<-rbind(sort(colSums(t1)),sort(punti)) 
colnames(r1)<-c("Valore","Vincitore","Perdente") 
r1<-as.data.frame(r1) 

Aber ich habe mehr Matrizen t_ und r_ so würde Ich mag eine for-Schleife wie auszuführen:

for (i in 1:150) 
{ 
    pt[i]<-rbind(sort(colSums(t[i])),sort(punti)) 
    colnames(r[i])<-c("Valore","Vincitore","Perdente") 
    r[i]<-as.data.frame(r[i]) 
} 

Dieses einfach nicht funktionieren, weil r_, t_ und pt_ Strings sind, aber Sie bekommen sowohl die Idee als auch, dass ich nicht gerne diese drei Zeilen kopieren und einfügen und die [i] 150 Mal manuell bearbeiten würde. Gibt es einen Weg, es zu tun?

+2

Willkommen bei StackOverflow! Bitte denken Sie daran, Ihre Beispiele * möglichst reproduzierbar * zu machen. Vielleicht könnten Sie den 'head()' Ihrer Datenobjekte "ausgeben". –

+2

Als Follow-up zu @ Hack-R Kommentar: Bitte lesen Sie [Wie man ein großes reproduzierbares Beispiel in R?] (Https://stackoverflow.com/questions/5963269/how-to-make-a-great-r -reproducible-beispiel) – Masoud

+0

Danke. Ich werde hinzufügen, was benötigt wird. Ich habe versucht, es so knapp wie möglich zu halten, denn das war nicht das Problem, aber ja, du hast Recht. –

Antwort

0

persönlich rate ich nicht dynamisch und automatisch viele Variablen in der globalen Umgebung zu erstellen, und würde Ihnen raten, darüber nachzudenken, wie Sie Ihre Ziele ohne einen solchen Ansatz erreichen können. Wenn Sie das Gefühl haben, dass Sie wirklich alle diese Variablen dynamisch erstellen müssen, können Sie von der Funktion assign profitieren.

könnte es wie so funktioniert:

for (i in 1:150) 
{ 
assign(paste0('p',i),rbind(sort(colSums(t[i])),sort(punti))) 
} 

das erste Argument in der assign Funktion ist die Formel für die Variablennamen und wie es erstellt wird; Das zweite Argument ist das, was Sie der zu erstellenden Variablen zuweisen möchten.

+0

Ich habe Ihren Vorschlag leicht modifiziert, weil' colSums (t [i]) 'nicht funktioniert' (Fehler in t [i]: Objekt vom Typ ' Schließung 'ist keine Teilmenge} '. Ich habe versucht 'für (i in 1: 150) {zuweisen (paste0 ('p', i), rbind (sortieren (colSums (paste0 ('t', i))), sortieren (punti)))} aber es funktioniert auch nicht. Es meldet 'Fehler in colSums (paste0 (" t ", i)): 'x' muss mindestens ein zweidimensionales Array sein (übersetzt aus dem Italienischen, es kann nicht die perfekte Übersetzung sein) –

Verwandte Themen