在R

时间:2018-02-09 17:53:46

标签: r loops plot

我试图在循环中编写这些命令:

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不明白我想要那些数据集。

我知道为此使用循环是不好的做法。但有谁知道我如何进一步使用循环中创建的数据框? 或者我可以使用apply函数吗?

提前致谢!

2 个答案:

答案 0 :(得分:2)

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

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()
}

答案 1 :(得分:0)

不要将您的对象命名为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))