【问题标题】:use a subset data frame from a loop in the same loop again in R在R中再次使用来自同一循环中的循环的子集数据帧
【发布时间】:2018-02-09 17:53:46
【问题描述】:

我正在尝试循环编写此命令:

table1 <- table[table$ringnr == 1,] 
interaction.plot(table1$expnr, table1$disturbance, table1$flights)
table2 <- table[table$ringnr == 2,] 
interaction.plot(table2$expnr, table2$disturbance, table2$flights)
table3 <- table[table$ringnr == 3,] 
interaction.plot(table3$expnr, table3$disturbance, table3$flights)`

这是我目前所拥有的:

 for(i in 1:19){
mypath <- file.path("C:", "Users", paste("expnr_", i, ".jpg", sep = ""))
jpeg(file=mypath)
assign(paste("table",i), subset(table, ringnr == i))
interaction.plot(table[i]$expnr, table[i]$disturbance, table[i]$flights)
dev.off()}

第一部分正在工作,我得到了数据集 table1、table2 等 但是,如果我想在下一行与他们合作,R 不明白我想要这些数据集。

我知道为此使用循环是不好的做法。但是有谁知道我如何进一步处理在循环中创建的那些数据框? 或者我可以使用应用功能来做到这一点吗?

提前致谢!

【问题讨论】:

  • 以后需要table1、table2还是只在循环中?
  • 您将表分配给paste("table", i)。分配的对象是table i,而不是您尝试在下一行调用的向量 (table[i])
  • 谢谢。埃罗考尔。我假设它不是向​​量,但 R 没有识别表 i。 Linus 的答案正是我想要的。谢谢!

标签: r loops plot


【解决方案1】:

如果以后不需要过滤后的表,可以这样做:

for(i in 1:19){
  mypath <- file.path("C:", "Users", paste("expnr_", i, ".jpg", sep = ""))
  jpeg(file=mypath)
  temp_table <- subset(table, ringnr == i)
  interaction.plot(temp_table$expnr, temp_table$disturbance, temp_table$flights)
  dev.off()
}

如果您以后需要它们,可以将它们存储在列表中:

table_list<- list()
for(i in 1:19){
  mypath <- file.path("C:", "Users", paste("expnr_", i, ".jpg", sep = ""))
  jpeg(file=mypath)
  table_list[[i]] <- subset(table, ringnr == i)
  interaction.plot(table_list[[i]]$expnr, table_list[[i]]$disturbance, table_list[[i]]$flights)
  dev.off()
}

【讨论】:

    【解决方案2】:

    不要将你的对象命名为tabletable 是一个常用的 R 函数,而你正在覆盖它,你会在某些时候遇到麻烦。

    另外更重要的是,不要在这里创建 3 个表,将它们放在一个列表中,它们是相同类型的编号对象,它们应该保持链接。完全避免使用assign是一个很好的经验法则。

    your_tables <- lapply(1:3,function(i) subset(your_table,ringnr == i))
    

    那么你可以这样做例如:

    lapply(your_tables,function(x) interaction.plot(x$expnr, x$disturbance, x$flights))
    

    【讨论】:

    • 感谢您的建议。我怀疑也可以使用 apply 功能。很高兴知道它是如何工作的!
    猜你喜欢
    • 2021-07-05
    • 1970-01-01
    • 1970-01-01
    • 2013-11-21
    • 2016-09-25
    • 1970-01-01
    • 2017-10-27
    • 2019-07-29
    相关资源
    最近更新 更多