【问题标题】:assign rownames within a loop to constructed variables names将循环中的行名分配给构造的变量名称
【发布时间】:2014-12-28 05:16:26
【问题描述】:

我正在循环中创建数据框。数据框的名称应该是名称和数字的组合(循环迭代)。我为此使用了分配功能并且可以工作。我还想为数据框的行分配名称。我尝试了两种方法,但我收到错误消息“赋值目标扩展为非语言对象”和“只有第一个元素用作变量名”。下面是我正在尝试做的一个可重现的例子。

rows<-c("a","b")
df<-data.frame(var1=c(1,2),var2=c(10,20))
for (n in 1:2){
  assign  (paste("data",n,sep="_"),df)
  rownames(get(paste("data",n,sep="_")))<-rows        # it doesn't work
  assign(rownames(get(paste("data",n,sep="_"))),rows) # it doesn't work
}

我想知道为什么它不起作用以及如何解决它。我发现了类似thisthis 的线程,但我无法解决我的问题。谢谢。

【问题讨论】:

  • 这里已经问过很多次了。答案总是“不要那样做”。而是将您的 data.frames 放在一个列表中。

标签: r loops assign names


【解决方案1】:

根据 Roland 的评论,我提出了这个解决方案:

rows<-c("a","b")
df<-data.frame(var1=c(1,2),var2=c(10,20))
dfs<-list()
for (n in 1:2){
  dfs[[n]]<-df
  rownames(dfs[[n]])<-rows
}

列表是关键!

【讨论】:

    【解决方案2】:

    或者没有列表,你只需要一个虚拟变量:

    rows<-c("a","b")
    df<-data.frame(var1=c(1,2),var2=c(10,20))
    for (n in 1:2){
      assign  (paste("data",n,sep="_"),df)
      labelling <- get(paste("data",n,sep="_"))
      labels <- rows
      rownames(labelling)<-labels
      assign(paste("data",n,sep="_"),labelling)
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-09-30
      • 2020-01-16
      • 1970-01-01
      • 1970-01-01
      • 2012-11-04
      • 2018-08-25
      相关资源
      最近更新 更多