【问题标题】:name objects from vector values根据向量值命名对象
【发布时间】:2017-12-14 01:41:29
【问题描述】:

我正在尝试使用向量的字符值来命名新对象,然后将这些新对象转换为新矩阵。所以如果我有以下向量:

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)

【问题讨论】:

    标签: r object naming


    【解决方案1】:

    1) 分配 通常人们希望将值分配到列表中,但如果您必须将它们分配到全局环境中,那么这是 for 循环的一个很好的应用程序:

    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)
    

    【讨论】:

      猜你喜欢
      • 2022-06-29
      • 2021-10-19
      • 2021-10-04
      • 2022-10-15
      • 2019-07-15
      • 1970-01-01
      • 2019-04-20
      • 1970-01-01
      • 2018-08-18
      相关资源
      最近更新 更多