2016-07-27 4 views
0

Ich erstelle eine große Menge produktspezifischer Tabellen basierend auf Informationen, die aus mehreren anderen Tabellen kompiliert wurden. Aufgrund der Menge der Produkttabellen, die ich erstellen werde, werden ihre Namen generiert. Ich möchte Vektorwerte zuweisen, indem ich eine Zeichenfolge anstelle des spezifischen Namens des Objekts verwende. Irgendwann werde ich mich auf eine for-Schleife beziehen müssen.Zuweisen von Vektorwert zu Df, auf den durch Zeichenfolge verwiesen wird

product<-list("A", "B", "C") 
assign(paste(product[3],"_gen", sep=""), as.data.frame(matrix(nrow=3, ncol=5))) 

von diesem wurde die Matrix erstellt. Ich suche nach der ursprünglichen Zeichenfolge, um bestimmte Vektoren zu ändern. Ich möchte C_gen [3,2] auf einen Wert von 5 ändern, indem ich die Originalpastenreferenz verwende. Ich habe verschiedene Möglichkeiten, mit der < fehlgeschlagen - und assign() Funktionen, aber wahrscheinlich der beste Weg, um die Basis zu zeigen, was ich versuche, mit zu tun:

paste(product[3],"_gen", sep="")[3,2]<- 5 
+1

Warum nicht 'sapply' mit' USE.NAMSE = TRUE' und 'simply = FALSE' verwenden, um ein benanntes Listenobjekt zu erstellen, das unsere Matrizen enthält. Wahrscheinlich eine bessere Idee, als Ihre globale Umgebung mit einer Reihe von benannten Matrizen zu blockieren. Dann können Sie die Apply-Funktionen verwenden, um über die Matrizen zu iterieren und danach weitere Berechnungen durchzuführen. – dayne

Antwort

0

Eine Möglichkeit, zu tun, was Sie fragen um die Anrufe selbst zu generieren, dann evaluieren Sie die Anrufe in der globalen Umgebung. Bitte lesen Sie ?call und werfen Sie einen Blick auf this site.

## Create two matrices, "mat1" and "mat2" 
mat1 <- matrix(1:10, ncol = 2) 
mat2 <- matrix(1:10, ncol = 2) 

## Need a vector of the matrix names 
nms <- c("mat1", "mat2") 

## Create a function to generate calls 
mkCall <- function(x) call("<-", call("[", as.name(x), 1, 2), 100) 

## Create and evaluate calls 
calls <- lapply(nms, mkCall) 
sapply(calls, eval, envir = globalenv()) 

Ein weiterer Ansatz ist parse zu verwenden Strings in Ausdrücke zu verwandeln, wie in this answer gezeigt.

calls2 <- paste0(nms, "[1, 2] <- 150") 
calls2 <- lapply(calls, function(x) parse(text = x)) 
sapply(calls2, eval, envir = globalenv()) 

Für das Problem, das Sie grob umrissen, ich denke immer noch, es wäre viel besser, zurück zu gehen und die ursprünglichen Matrizen erzeugen dann mit sapply mit [[ die einzelnen Matrizen zugreifen.

Verwandte Themen