我最近将我的 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
功能。
如果有人有替代方案,我也会对此持开放态度。
干杯!