如何创建将字符串和变量连接在一起的矩阵名称? (在R中)

时间:2019-04-12 14:37:58

标签: r

我有一个向量,该向量的值要包含在矩阵的第一行中,该值将填充到下两个for循环中,因此它将是三个for循环。我已经尝试过catpaste,但没有成功。

所以我的问题是要插入名称为矩阵v1的{​​{1}}值,其名称应为cart_1(当v1为1时)

cart_

2 个答案:

答案 0 :(得分:1)

一个好的做法是使用一个命名列表:

cart <- list()
for (v1 in 1:5){
  cart[[paste0("cart_", v1)]] <- matrix(0,3,3)
}

您可以使用:

访问cart_1
cart[["cart_1"]]

向cart_n创建n个对象cart_1不是一个好习惯。一个包含您n个对象的对象更好。如果您有2个连续的不同大小的循环,则可能会保留不需要的对象。

答案 1 :(得分:0)

这实际上是R常见问题解答(https://cran.r-project.org/doc/FAQ/R-FAQ.html#How-can-I-turn-a-string-into-a-variable_003f

中的问题7.21

该答案最重要的部分是结尾处,它指出使用列表通常更容易。 @Clemsang给出了在for循环中使用列表的示例。

使用列表而不是全局变量,可以减少意外覆盖另一个变量的可能性,并更轻松地处理结果。如果您想对每个新矩阵进行处理,则可以在类似于它们创建方式的循环中引用它们,而不必担心get(或使用lapply或{{ 1}}使其变得更容易),以及是否要复制/保存/删除/等。所有矩阵,您只需使用一个对象即可,而无需再次循环。

在上面的示例中,循环的主要结果是进行了几次分配。在这种情况下,使用sapply或相关函数代替显式循环通常会更容易,更好。例如:

lapply