有没有办法在R中指定tcltk版本?

w41d8nur  于 2023-03-27  发布在  其他
关注(0)|答案(1)|浏览(130)

有人问我是否可以“修复”在3.2.2版本中创建的R脚本,该脚本在4.2.2版本中停止工作。
脚本原来是使用tcltk包的Tcl/tk接口。脚本以tclRequire("BWidget")tclRequire("Tktable")开头。它产生的GUI基本上是,
1.导入csv
1.使用下拉菜单选择一列
1.第二个下拉菜单显示上述列的级别
1.做分析
问题出现在第3个,当使用更新的R版本时,下拉菜单只是空白的,没有可用的选择。
在使用同一系统(Window OS)时,当使用R版本3.2.2时,它返回

> tclRequire("BWidget")
<Tcl> 1.8
> tclRequire("Tktable")
<Tcl> 2.9

而使用R版本4.2.2返回

> tclRequire("BWidget")
<Tcl> 1.9.15
> tclRequire("Tktable")
<Tcl> 2.10

这是我第一次听说Tcl/Tk是什么,似乎Tcl中的差异是罪魁祸首,而不是R本身。
我读了https://stat.ethz.ch/R-manual/R-devel/library/tcltk/html/TclInterface.html并试图玩

addTclPath(path = ".")
tclRequire(package, warn = TRUE)
tclVersion()

但不知道该怎么做
有没有办法在我使用其他版本的R时,将Tcl指定为1.8和2.9?

kqqjbcuj

kqqjbcuj1#

**1)**一种方法是将R安装中的BWidget目录的内容替换为旧目录。在Windows上,您可以在R.home("Tcl/lib/BWidget")中找到它。
**2)**另一种方法是将包含bWidget树的目录添加到路径中。

假设旧的BWidget是1.9.9版本,位于C:/PROGRA~1/R/R-3.5.2patched/Tcl/lib中,这是它们在我的系统中的位置。根据需要进行更改。特别是,您可能希望创建一个新目录,并将BWidget和TkTable树放在它下面。
然后运行这段R代码。首先添加指定的目录。然后确保系统忘记了BWidget,以防它已经被设置。最后加载所需版本的BWidget。

library(tcltk)

 addTclPath("C:/PROGRA~1/R/R-3.5.2patched/Tcl/lib")
.Tcl("package forget BWidget")
.Tcl("package require -exact BWidget 1.9.9") # this should reply with 1.9.9

还要注意以下命令:

as.character(tcl("set", "auto_path")) # shows path elements
 as.character(tcl("package", "name")) # shows tcl packages
 tcl("package", "provide", "BWidget") # show BWidget version being used

有关tcl package命令的详细信息,请参阅:https://www.tcl.tk/man/tcl/TclCmd/package.html

**3)**另一种方法是确定BWidget的两个版本之间的差异并修复您的程序。Windows上的免费winmerge程序非常适合比较两个目录。在Windows cmd行(根据需要更改目录):

winmergeu C:/PROGRA~1/R/R-3.5.2patched/Tcl/lib/BWidget C:/PROGRA~1/R/R-4.2/Tcl/lib/BWidget

更新

做了一些改进。似乎我们不需要在开始插入新的库--把它放在结尾就足够了--只要我们指定我们想要的特定版本。

相关问题