In R, Ich versuche, eine Zählung Matrix von Elementen innerhalb zahlreicher Datendateien zu erstellen:Leistungsproblem in R
rnames <- c("N","A")
mymatrix <- matrix(nrow=2,ncol=0,dimnames=list(rnames))
#loop through hundreds of large files (MB)
#make the vector "names" contain all elements within each file
for(name in names)
{
#if name is already in the matrix increment by 1 the second row
if(name %in% colnames(mymatrix))
{
mymatrix[2,name] = mymatrix[2,name]+1
}
#else add a column to the matrix with the specified name
else
{
mymatrix <- transform(mymatrix,name)
mymatrix[2,name] = 1
}
}
ich und fand Rprof Befehl ausgeführt wird, dass das Spiel() Funktion wahrscheinlich innerhalb des% eingebettet in% operator ist derjenige, der Leistungsprobleme verursacht (längere Ausführungszeit)
Gibt es eine effizientere Möglichkeit, für jedes Element in einem Vektor zu überprüfen, ob es in meiner Matrix inkrementiert ist, wenn es keine neue Spalte erstellt in der Matrix mit diesem Vektorelement als Spaltenname?
Wenn Sie einen reproduzierbaren Code hier wollen, ist es ... aber bedenken Sie, dass der Name Vektor in meinem Originalcode aus großen Dateien gelesen wird, die Tausende von Variablen enthalten, die mit einer immer steigenden Spaltennummer in mymatrix übereinstimmen führt letztlich zu einer Erhöhung der Laufzeit:
rnames <- c("N","A")
mymatrix <- matrix(nrow=2,ncol=0,dimnames=list(rnames))
#suppose this is what the first file contains
names <- c("x","y","z","x","x","y","a")
#suppose this is what the second file contains
names <- c("x","y","z","x","x","x","x","k")
for(name in names)
{
if(name %in% colnames(mymatrix))
{
mymatrix[2,name] = mymatrix[2,name] + 1
}
else
{
mymatrix <- transform(mymatrix,name)
mymatrix[2,name] = 1
}
}
the expected output
> mymatrix
x y z a k
N NA NA NA NA NA
A 8 3 2 1 1
Ich sehe 'Namen' nicht in Ihrem Code. Soll das "Namen" sein? – Gopala
nein, Namen ist ein anderer Vektor, der sich von rnames unterscheidet. Ich habe kommentiert, wie ich diesen Vektor ausfülle, aber wenn Sie den Quellcode haben wollen, kann ich ihn liefern: mydataframe <- readRDS (Datei) Namen <- colnames (mydataframe) – Imlerith
Können Sie ein reproduzierbares Beispiel mit minimaler Eingabe und erwarteter Ausgabe veröffentlichen? Wenn wir den Code nicht ausführen können, ist es schwer, Ihnen zu helfen. – Gopala