2016-04-15 3 views
1

gWidgets Rライブラリを使用して衛星画像をダウンロードするGUIを構築しようとしています。その目的は、コンマ区切り値ファイルからURLを読み取ることです。 GUIは大丈夫だとは思うけど、私が期待していることはしていない。私は間違って何かをしています、どんな助けも大歓迎です。gWidgetsのgfilebrowseを使用してcsvを読む

Online.Access.URLs <- c("http://e4ftl01.cr.usgs.gov//MODIS_Composites/MOLT/MOD09A1.005/2000.02.18/MOD09A1.A2000049.h09v06.005.2006268183648.hdf", 
          "http://e4ftl01.cr.usgs.gov//MODIS_Composites/MOLT/MOD09A1.005/2000.02.26/MOD09A1.A2000057.h09v06.005.2006270065224.hdf", 
          "http://e4ftl01.cr.usgs.gov//MODIS_Composites/MOLT/MOD09A1.005/2000.03.05/MOD09A1.A2000065.h09v06.005.2006269234536.hdf") 



Producer.Granule.ID <- c("MOD09A1.A2000049.h09v06.005.2006268183648.hdf", 
           "MOD09A1.A2000057.h09v06.005.2006270065224.hdf", 
           "MOD09A1.A2000065.h09v06.005.2006269234536.hdf") 

df <- data.frame(Producer.Granule.ID,Online.Access.URLs)

write.csv(df,"C:\\GUI_test\\h09v06v3.csv",row.names=FALSE) 

そして、これが私の試みです:

my.DownloadHDF <- function(){ 

    library(gWidgets) 
    library(gWidgetstcltk) 
    library(RCurl) 

    options(guiToolkit = "tcltk") 
    win <- gwindow("Download HDF with R!", visible = FALSE) 

    csv.frame  <- gframe("csv file ", container = win) 
    csv.label  <- glabel("csv with HDF's names ", container = csv.frame) 
    csv.file.name <- gfilebrowse("Select csv file", type="open",cont=csv.frame,action="read.csv") 

    dir.frame <- gframe("Output Directory ", container = win) 
    dir.label <- glabel("Where to save HDF's? ", container = dir.frame) 
    dir.out <- gfilebrowse("Select folder ",type = "selectdir", cont=dir.frame) 

    dlw.frame <- gframe("Download ", container = win) 
    dlw.label <- glabel(" ", container = dlw.frame) 

    btnDwn <- gbutton("Start Download", container = dlw.frame, 
        handler = function(csv.file.name,dir.out){ 

         df  <- read.csv(csv.file.name, header=TRUE,sep=",") 
         hdf.urls <- df$Online.Access.URLs      
         hdf.urls <- as.character(hdf.urls) 
         hdf.names <- df$Producer.Granule.ID     
         hdf.names <- as.character(hdf.names) 

         for (i in 1:length(hdf.names)){ 
         URL  <- hdf.urls [i]  
         file  <- hdf.names[i]  
         download.file(URL,paste(dir.out,file,sep=""),mode="wb") 
         cat(paste("Composite number ",i,"successfully downloaded!"),sep="\n") 
         cat("\n\n\n\n\n\n\n\n") 
         }}) 
    visible(win) <- TRUE 
} 
my.DownloadHDF() 

私はRStudio 0.98でR-3.2.2を使用しています。ここ

はサンプルデータです。 1103。

+0

光沢を使うことを考えましたか? gWidgetsよりもシンプルに見えます。 – YCR

+0

こんにちはYCR、あなたの答えに感謝します。私はRでGUIを作成している経験がありません。光沢のあるgWdigetsをすばやく見ていて、後者は直感的でした。私が作成したGUIは、特定のポイントまで作業を行いますが、問題は、関数にCSVファイルを読み込ませる方法がわからないということです。何か案が? – Shepherd

+0

gWidgets2tcltkとShinyに問題がありました。多分今は固定されているかもしれない。それがうまくいけば、 'read.csv'はあなたの友人です。 'a = gfilebrowse(cont = w、handler = function(h、...)x << - read.csv(svalue(h $ obj)))'これはハンドラで呼び出すことができます。値が読み込まれます。そこにはいくつかのバリデーションがありますが、それを追加することができます。しかし、あらかじめ設定されたURLのリストから選択する場合は、gcomboboxも必要です。 – jverzani

答えて

1

改善後のスクリプトです。今私はそれが私が期待することを正確に行います。誰かが役に立つと願っています:

# load functions #### 
# download function 
f.d <- function(hdf.urls,hdf.names,out.dir){ 
    for(i in 1:length(hdf.urls)){ 
    URL  <- hdf.urls [i]  
    file  <- hdf.names [i] 
    download.file(URL,paste(out.dir,"/",file,sep=""),mode="wb") 
    }} 

# read csv function 
f.csv <- function(x){ 
    df1 <<- read.csv(x,header=TRUE,sep=",") 
    hdf.urls <<- df1$Online.Access.URLs 
    hdf.urls <<- as.character(hdf.urls) 
    hdf.names <<- df1$Producer.Granule.ID 
    hdf.names <<- as.character(hdf.names) 
} 
# load functions #### 

# my.DownloadHDFv2 this one works fine #### 
my.DownloadHDF <- function(){ 
    options(guiToolkit = "tcltk") 

    win   <- gwindow("Download HDF with R!", visible = FALSE) 
    csv.frame <- gframe("csv with HDFs names ", container = win) 

    a <- gfilebrowse("Upload csv file",cont=csv.frame, 
        handler=function(h,...){ 
        f.csv(svalue(a))     
    }) 

    path.frame <- gframe("Output Directory ", container = win) 
    brow   <- gfilebrowse(text = "Select folder...", type = "selectdir",container=path.frame, 
           handler=function(h,...){ 
           out.dir  <<- svalue(brow) 
           }) 

    b <- gbutton(text="Start Download",container = win, 
         handler = function(h,...){ 
          f.d(hdf.urls,hdf.names,out.dir=out.dir)     
         }) 
    visible(win)<-TRUE 
} 
my.DownloadHDF() 
# my.DownloadHDFv2 this one works fine #### 
関連する問題