1

我最近将我的 R 从 3.4.1 升级到 4.0.1,因为我需要使用 TSP 包并且有一段时间没有更新 R。TSP 只需要大于 3.5.0 但我想我会安装最新版本,对吧?

现在,我正在尝试运行过去几年每天使用的代码,但在 R Studio 和 R 控制台中都遇到了致命错误。它使用 tcltk 库来存储用户名和密码,这在我从服务器中提取 SQL 数据以在我的代码中使用时至关重要。我不想将我的凭据存储在代码中,而且我们的密码每月都会更改,这很麻烦。

我尝试查看其他问题,例如升级 R / R Studio 后出现致命错误,但这似乎不是问题。

这是我的sessionInfo()

R version 4.0.1 (2020-06-06)
Platform: x86_64-w64-mingw32/x64 (64-bit)
Running under: Windows 10 x64 (build 18363)

Matrix products: default

locale:
[1] LC_COLLATE=English_United States.1252  LC_CTYPE=English_United States.1252    LC_MONETARY=English_United States.1252 LC_NUMERIC=C                          
[5] LC_TIME=English_United States.1252    

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base     

loaded via a namespace (and not attached):
[1] compiler_4.0.1 tools_4.0.1

我怀疑这tcltk::tkentry是问题所在,因为我逐行进行,这就是导致致命错误的原因。

这是我的功能:

getLoginDetails <- function(){
  ## Based on code by Barry Rowlingson
  ## http://r.789695.n4.nabble.com/tkentry-that-exits-after-RETURN-tt854721.html#none
  require(tcltk)
  tt <- tktoplevel()
  tkwm.title(tt, "Get login details")
  Name <- tclVar("Login ID")
  Password <- tclVar("Password")
  entry.Name <- tkentry(tt,width="20", textvariable=Name)
  entry.Password <- tkentry(tt, width="20", show="*", 
                            textvariable=Password)
  tkgrid(tklabel(tt, text="Please enter your login details."))
  tkgrid(entry.Name)
  tkgrid(entry.Password)

  OnOK <- function()
  { 
    tkdestroy(tt) 
  }
  OK.but <-tkbutton(tt,text=" OK ", command=OnOK)
  tkbind(entry.Password, "<Return>", OnOK)
  tkgrid(OK.but)
  tkfocus(tt)
  tkwait.window(tt)

  invisible(c(loginID=tclvalue(Name), password=tclvalue(Password)))
}
credentials <- getLoginDetails()

包正确加载并capabilities("tcltk")TRUE.

空的tktoplevel()将加载:

在此处输入图像描述

但是随后会弹出此错误消息并且 R Studio 中止:

在此处输入图像描述

任何帮助,将不胜感激!我的日常工作活动需要此getLoginDetails功能。

如果有人有替代方案,我也会对此持开放态度。

干杯!

4

2 回答 2

0

R 4.0.2的发行说明报告该错误已在该版本中修复:

使用 tcltk 小部件不再使 R 在 Windows 上崩溃。

于 2020-06-28T23:32:49.623 回答
0

问题似乎出在 TclTk 上。Rcmdr 不会在 R-4.0.1 中运行,但在 R-4.0.0 中运行正常

如果调用 Tcltk 功能,我的自制程序包将不会加载。

于 2020-06-17T22:42:47.253 回答