我根据从其他几个表编译的信息生成大量特定于产品的表。由于我将创建的产品表的数量,因此会生成它们的名称。我希望通过使用字符串而不是对象的特定名称来分配矢量值。最终我将不得不通过for循环引用。
product<-list("A", "B", "C")
assign(paste(product[3],"_gen", sep=""), as.data.frame(matrix(nrow=3, ncol=5)))
从中创建了矩阵。我希望引用原始字符串来更改特定的向量。我想使用原始粘贴引用将C_gen [3,2]更改为值5。我使用&lt; - 和assign()函数以不同的方式失败了,但可能是展示我尝试做的基础的最好方法是:
paste(product[3],"_gen", sep="")[3,2]<- 5
答案 0 :(得分: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
返回并生成原始矩阵然后使用[[
访问各个矩阵会更好。