我正在尝试使用向量的字符值来命名新对象,然后将这些新对象转换为新的矩阵。所以,如果我有以下向量:
Named <- c("a", "b", "c")
我希望有一个循环来创建名为“a”,“b”和“c”的对象
for(i in 1:length(Named)){
Named[i] <- matrix(0L, nrow = 3, ncol = 3)
}
我意识到此代码当前将数据输入到向量中。如何在Named [i]中提取字符以用作新对象的名称?
这样循环就像编写这段代码一样:
a <- matrix(0L, nrow = 3, ncol = 3)
b <- matrix(0L, nrow = 3, ncol = 3)
c <- matrix(0L, nrow = 3, ncol = 3)
答案 0 :(得分:1)
1)分配通常,人们希望将值分配到列表中,但是如果必须将它们分配到全局环境中,那么这是for
循环的一个很好的应用程序:< / p>
for(nm in Named) assign(nm, matrix(0L, 3, 3), .GlobalEnv)
如果您已在全局环境级别执行此操作,则可以选择省略assign
的最后一个参数。
2)索引全局环境这也可以:
for(nm in Named) .GlobalEnv[[nm]] <- matrix(0L, 3, 3)
3)list2env 另一种方法是创建一个列表,然后使用list2env
将其组件复制到全局环境。
list2env( Map(function(x) matrix(0L, 3, 3), Named), .GlobalEnv )
4)硬编码请注意,如果您只需要分配一些元素,并且不需要通过Named
这样的变量进行参数化,那么您只需要硬编码它是这样的:
a <- b <- c <- matrix(0L, 3, 3)
5)列表如果你最终决定在全球环境中创建一个列表而不是对象,那么:
L <- Map(function(x) matrix(0L, 3, 3), Named)