2016-07-27 67 views
0

我正根據從其他幾個表編譯的信息生成大量的產品特定表。由於我將創建的產品表的數量,會生成它們的名稱。我正在尋找通過使用字符串,而不是對象的具體名稱來分配矢量值。最終我將不得不通過for循環來引用。將矢量值分配給由字符串引用的df

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

從這個矩陣已經創建。我正在尋找引用原始字符串來改變特定的向量。我想使用原始粘貼參考將C_gen [3,2]更改爲值5。我沒使用<不同的方式 - 和分配()函數,但也許是最好的方式來顯示我試圖做的是與基礎:

​​
+1

爲什麼不用'sapply'和'USE.NAMSE = TRUE'和'simplify = FALSE'來創建一個包含矩陣的命名列表對象。用一堆命名矩陣來干擾你的全球環境可能是一個更好的主意。然後,您可以使用apply函數遍歷矩陣並在之後執行其他計算。 – dayne

回答

0

一種方式做你問什麼是自己生成呼叫,然後只評估全球環境中的呼叫。請閱讀?call並查看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()) 

另一種方法是使用parse到字符串轉換成表達式,如圖this answer

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

爲您大致概括的問題,我仍然認爲這將是更好回去產生使用sapply然後使用[[訪問各個矩陣原有矩陣。

相關問題