代码之家  ›  专栏  ›  技术社区  ›  Maiasaura

如何动态命名变量?

  •  83
  • Maiasaura  · 技术社区  · 16 年前

    我想把列表中的数据帧读入末尾有数字的新变量。像是orca1,orca2,orca3。。。

    如果我试着

    paste("orca",i,sep="")=list_name[[i]]
    

    target of assignment expands to non-language object
    

    还有别的办法吗?

    6 回复  |  直到 9 年前
        1
  •  126
  •   BroVic    8 年前

    使用 assign :

    assign(paste("orca", i, sep = ""), list_name[[i]])
    
        2
  •  34
  •   John    11 年前

    orca1 , orca2 orca[1] , orca[2]

    通常你只需要一个数字来区分变量列表,因为这个数字是以后访问它们的一种方便方法。

    orca <- list()
    orca[1] <- "Hi"
    orca[2] <- 59
    

    否则, assign

        3
  •  11
  •   zx8754    10 年前

    不要制作数据帧。保留列表,命名其元素,但不要附加它。

    就attach而言,它在R中的编程实践非常糟糕,如果不小心的话,可能会导致很多麻烦。

        4
  •  4
  •   Mox    8 年前

    FAQ says:

    如果你有

    varname <- c("a", "b", "d")
    

    你能做到的

    get(varname[1]) + 2
    

    a + 2
    

    assign(varname[1], 2 + 2)
    

    对于

    a <- 2 + 2
    

    assign的语法: 赋值(x,值)

    以字符串形式给出的变量名。不执行强制,将使用长度大于1的字符向量的第一个元素,并发出警告。

    价值: 要分配给x的值。

        5
  •  1
  •   Vincent Bonhomme    8 年前

    list_name<-list()
    for(i in 1:100){
        paste("orca",i,sep="")->list_name[[i]]
    }
    

    它工作得很好。在您输入的示例中,缺少第一行,然后给出错误消息。

        6
  •  0
  •   Marek    16 年前

    另一个棘手的解决方案是命名list和 attach

    list_name = list(
        head(iris),
        head(swiss),
        head(airquality)
        )
    
    names(list_name) <- paste("orca", seq_along(list_name), sep="")
    attach(list_name)
    
    orca1
    #   Sepal.Length Sepal.Width Petal.Length Petal.Width Species
    # 1          5.1         3.5          1.4         0.2  setosa
    # 2          4.9         3.0          1.4         0.2  setosa
    # 3          4.7         3.2          1.3         0.2  setosa
    # 4          4.6         3.1          1.5         0.2  setosa
    # 5          5.0         3.6          1.4         0.2  setosa
    # 6          5.4         3.9          1.7         0.4  setosa
    
    推荐文章