簡體   English   中英

在 R 中使用 tcltk 在彈出窗口(表格小部件)中顯示數據 - 為什么它會刪除最后一行數據?

[英]Displaying data in a pop up window (table widget) using tcltk in R - why is it dropping the last row of data?

我正在努力創建一個小部件來使用 tcl/tk 在彈出窗口中查看表格。 我正在關注這個例子: http : //r.789695.n4.nabble.com/Tck-tk-help-td1837711.html

但是當我用我的數據運行腳本時,最后一行數據不包含在數組中。 這是汽車數據的示例(表不顯示行名稱無關緊要):

require(tcltk)
tclRequire("Tktable")

toTclArray<-function(dsn,dig=2) { 
 # http://r.789695.n4.nabble.com/Tck-tk-help-td1837711.html
 # Converts Data Frame/Matrix to a Tcl Array for Use in Displaying Tables 
 # dsn is the data set name 
 # dig is the number of digits to round to 
        require(tcltk) 
        tclarray1<-tclArray() 
        for (i in 0:(dim(dsn)[1])) { 
                for (j in 0:(dim(dsn)[2]-1)) { 
                        # First Row is Set to Column Names to be Used as Labels 
                        if (i==0) { 
                                tclarray1[[i,j]]<-colnames(dsn)[j+1] 
                        } else { 
                                tem<-dsn[i,j+1] 
                                tclarray1[[i,j]]<-ifelse(is.na(tem),".", 
                                        ifelse(is.numeric(tem),round(tem,digits=dig), 
                                        as.character(tem))) 
                        } 
                } 
        } 
        return (tclarray1) 
}

temptable <- toTclArray(mtcars)
      tt<-tktoplevel()
      table1 <- tkwidget(tt,"table",variable=temptable,rows=dim(mtcars)[1],
          cols=dim(mtcars)[2],titlerows=1,selectmode="extended",colwidth=10)
          tkgrid(table1, pady = 20, padx = 30)

據我了解,原始數據集中第一行數據為第1行,第一列數據為第1列。在數組中,表頭為第0行,第一行數據為第1行,第一列數據是第零列。 在 for 循環中,它從行 (i) 0 到 32 和列 (j) 0 到 10。這是有道理的,因為列正在從 1-11 移動到 0-10,但行不應該需要更改因為仍然會有 32 行數據。 所以我無法弄清楚代碼中需要編輯什么才能將最后一行數據添加到表中。

(我確信有一個很棒的包可以運行這個任務,但我正在為一個工作中的項目創建一個界面,我被指示不要使用任何不隨基本 R 提供的包)

任何幫助深表感謝。 謝謝!

這是一個非常簡單的修復。 您的函數看起來不錯,但是您的小部件設置在將行分配到 tk 表時忘記考慮標題行。 只需添加一個+1就可以了:

tt<-tktoplevel()
table1 <- tkwidget(tt,"table",variable=temptable,rows=dim(mtcars)[1]+1,
                  cols=dim(mtcars)[2],titlerows=1,selectmode="extended",colwidth=10)
tkgrid(table1, pady = 20, padx = 30)

結果:

在此處輸入圖片說明

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM