gpt4 book ai didi

r - 在 R 中使用 tcltk 在弹出窗口(表格小部件)中显示数据 - 为什么它会删除最后一行数据?

转载 作者:行者123 更新时间:2023-12-02 05:11:42 28 4
gpt4 key购买 nike

我正在努力创建一个小部件来使用 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)

结果:

enter image description here

关于r - 在 R 中使用 tcltk 在弹出窗口(表格小部件)中显示数据 - 为什么它会删除最后一行数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32724775/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com