将向量值分配给由字符串

时间:2016-07-27 19:17:21

标签: r string dataframe

我根据从其他几个表编译的信息生成大量特定于产品的表。由于我将创建的产品表的数量,因此会生成它们的名称。我希望通过使用字符串而不是对象的特定名称来分配矢量值。最终我将不得不通过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

1 个答案:

答案 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返回并生成原始矩阵然后使用[[访问各个矩阵会更好。