2013-05-12 132 views
1

我有一個1000數據框的列表(每列有4列同名)。我想繪製陰謀並且交互式地處理它們。以下是示例(單個列表有3個數據框)。查看,編輯和保存r中大量圖的編輯

# dummy data 
c1 <- rnorm (40, 0.1, 0.02); c2 <- rnorm (40, 0.3, 0.01) 
c3 <- rnorm (40, 0.5, 0.01); c4 <- rnorm (40, 0.7, 0.01) 
c5 <- rnorm (40, 0.9, 0.03) 
Yv <- 0.3 + rnorm (200, 0.05, 0.05) 

# frist dataframe 
    var1 <- data.frame (idnames = paste ("ID", 1:200, sep = ""), Theta = round (c(c1, c2, c3, c4, c5), 2), R = round (Yv, 2),  cltr = c(rep(1:5, each = 40))) 

# same dummy data filled in second dataframe 
var3 <- data.frame (idnames = paste ("ID", 1:200, sep = ""), Theta = round (c(c1, c2, c3, c4, c5), 2), R = round (Yv, 2),  cltr = c(rep(1:5, each = 40))) 

    # same dummy data filled in third dataframe 
    var_5 <- data.frame (idnames = paste ("ID", 1:200, sep = ""), Theta = round (c(c1, c2, c3, c4, c5), 2), R = round (Yv, 2),  cltr = c(rep(1:5, each = 40))) 

# the list (the original list has >1000 dataframes) 
    mylist <- list (var1 = var1, var3 = var3, var_5 = var_5) 

我想創建一個類似的每個數據幀的地塊,但我需要工作一個接一個,節省出來,轉移到接下來的情節

# plot for var1 
myd1 <- data.frame (mylist[1]) 
names (myd1) <- c("idnames", "Theta", "R", "cltr") 
plot(myd1$Theta, myd1$R, col=myd1$cltr+1, pch = 19, main = names (mylist[1])) 
exclude <- identify(myd1$Theta, myd1$R) 
## left click on the points you want to exclude (right click to stop/finish) 
myd1$cltr1 <- as.numeric (myd1$cltr)+ 1 
myd1$cltr1[exclude] <- 1 
plot(myd1$Theta, myd1$R, col=myd1$cltr1, pch = 19, main = names (mylist[1])) 

enter image description here

我可以對列表中的其他數據幀做同樣的處理,例如2:

myd2 <- data.frame (mylist[2]) 
names (myd2) <- c("idnames", "Theta", "R", "cltr") 
plot(myd2$Theta, myd1$R, col=myd2$cltr+1, pch = 19, main = names (mylist[2])) 
exclude <- identify(myd2$Theta, myd2$R) 
## left click on the points you want to exclude (right click to stop/finish) 
myd2$cltr1 <- as.numeric (myd2$cltr)+ 1 
myd2$cltr1[exclude] <- 1 
plot(myd2$Theta, myd1$R, col=myd2$cltr1, pch = 19, main = names (mylist[2])) 

我有一些問題:

(1)我想循環這個過程,並且一個繪圖一次彈出我們,當編輯完成時,繪圖被關閉,下一個數據框的新繪圖彈出來工作等等,並繼續持續數據框在列表中。 (2)代替創建新的數據框,是否有可能在父列表中循環進程並將更改保存到父列表中。

幫助讚賞。

+0

有沒有辦法自動執行此任務? 1000手動編輯看起來像[足夠大的負載](http://xkcd.com/1205/)首先查看是否可以更有效地完成。 – baptiste 2013-05-12 20:20:25

+0

我沒有找到一個人,但並不完美,但我認爲這是值得的,即使它是幾小時或幾天的工作,現在我關心循環,感謝您的建議 – jon 2013-05-13 11:43:45

回答

1

我不打算詳細描述你想要在每個圖上做什麼,但我會構建一個功能,可以做任何你想做的繪圖和保存,包括一個scan行等待用戶輸入,然後觸發循環的下一次迭代。

plotwait <- function(){ # could pass arguments for saving, etc. 
    x <- rnorm(100,0,1) 
    y <- rnorm(100,0,1) 
    plot(y~x) 
    # other stuff you want to do to plot here 
    z <- scan(nlines=1,quiet=TRUE) # wait for any input 
} 

for(i in 1:1000) 
    plotwait()