我正在努力创建一个小部件,使用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行,第一列数据是第0列。在for循环中,它从行(i)0到32和列(j)0到10.这是有道理的,因为列从1-11移位到0-10,但行不应该是要改变,因为仍然会有32行数据。因此,我无法弄清楚代码中需要编辑的内容,以便将最后一行数据添加到表中。
(我确定这是一个很棒的软件包来运行这个任务,但是我正在为工作中的项目创建一个界面而且我被指示不要使用任何包没有基地R)
非常感谢任何帮助。谢谢!