R tcltk:根据 OS 尝试显示 png 文件时出错

R tcltk: error when trying to display a png file depending on the OS

这是我在用 R 编写的不同代码段中遇到的问题。 基本上,我想生成一个 window 来显示图片(.png 文件)。根据 this or this 的指导,我想出了这种代码:

library(tcltk)
tmpFile <- tempfile(fileext = ".png")
download.file("https://www.r-project.org/logo/Rlogo.png", tmpFile)

tcl("image","create","photo", "imageLogo", file=tmpFile)
win1 <- tktoplevel()
tkpack(ttklabel(win1, image="imageLogo", compound="image"))

这在 Mac OS 下工作正常,但在 Linux 和 Windows 上都行不通,我在那里显示了这样的错误消息:

[tcl] couldn't recognize data in image file

当我想显示图形时,我可以找到一些解决方法,例如使用包 tkrplotigraph。尽管如此,我真的很想知道为什么当 运行 我的脚本在 Linux 或 Windows 上时会出现这样的错误,而它在 Mac OS 上运行得很好].

如果这个问题很明显,我深表歉意,但我还没有发现任何关于 tcltk 包的潜在差异的信息,具体取决于 OS。

Tk 在 8.6 中添加了对 PNG 的原生支持。在此之前,您需要将 tkimg extension 加载 到 Tk 以添加所需的图像格式处理程序。如果 R 正在使用的 Tcl/Tk 安装设置正确,您可能可以使用它:

tclRequire("Img")

一旦你充分初始化了东西。是的,由于历史原因,内部使用的名称是“Img”,但那是不可能搜索到的! (这是关键in this mailing list message from way back。)

不过,将 Tcl 和 Tk 的版本升级到 8.6 可能是一个更好的举措。

最后,最近一段时间,我想关闭这个问题并总结一下针对我的问题所提出的不同建议:

  • R 与 Tcl 8.5 一起出现,即使是最新版本 3.3.2,这意味着无法将带有常用命令的 PNG 文件嵌入到由 [=26 创建的 window 中=].由于某些原因,它正在 Mac OS 上运行,但不要指望它能在其他 OS 上轻松运行。
  • 为了在 R 中 Tcl/Tk 生成的 window 中显示图片、图表等,最好使用 GIF 支持(如果可能)或尝试其他解决方案(参见可能的替代选项的问题)。
  • 如果真的想显示 PNG 文件,解决方案包括安装 Tcl 8.5(例如 ActiveTcl)以及扩展名 Img。为了使用您刚刚安装在计算机上的 Tcl/Tk 软件包,您可以参考 R FAQ for Windows 例如(如常见问题解答中所述,您需要安装 Tcl 8.5 - 我试过Tcl 8.6,因此希望能解决我的问题,但没有成功)。基本上,您需要设置一个环境变量 (MY_TCLTK) 并将安装包的路径放在 Tcl/Tk 中。不用说,Tcl/Tk 在 R 中常用来实现 GUI;如果你必须经过非常复杂的程序来设置系统,那么套餐就失去了它的优势。
  • 最后,由于 Tcl 8.6 应该很快或晚些时候与 R 一起使用(已经在开发版本中实现),这个问题将 事实上 过时。