我已经遇到了R中.Traceback对象的奇怪行为。

当我尝试打印简短错误消息时,就可以了,并且.Traceback[[1]]具有一个元素。但是,当我尝试打印很长的字符串时,.Traceback[[1]]对象成为两个元素的列表。看:

>stop(paste("short", "string"))
Error: short string
>.Traceback
[[1]]
[1] "stop(paste(\"short\", \"string\"))"

>stop(paste("very loooooooooooooooooooooooooooooooooooooooooooooooooooooong", "string"))
Error: very loooooooooooooooooooooooooooooooooooooooooooooooooooooong string
>.Traceback
[[1]]
[1] "stop(paste(\"very loooooooooooooooooooooooooooooooooooooooooooooooooooooong\", "
[2] "    \"string\"))"

你能帮我弄清楚吗?我对这种意外行为感到非常困惑。

最佳答案

你能帮我弄清楚吗?

似乎受options(width)影响

stop(paste("very loooooooooooooooooooooooooooooooooooooooooooooooooooooong", "string"))
.Traceback
#R [[1]]
#R [1] "stop(paste(\"very loooooooooooooooooooooooooooooooooooooooooooooooooooooong\", "
#R [2] "    \"string\"))"

options(width = 9001)
stop(paste("very loooooooooooooooooooooooooooooooooooooooooooooooooooooong", "string"))
.Traceback
#R [[1]]
#R [1] "stop(paste(\"very loooooooooooooooooooooooooooooooooooooooooooooooooooooong\", " "    \"string\"))"

但是,从帮助页面尚不清楚。虽然是用help(".Traceback")编写的

call 可能会打印在多条线路上,...

还要从help(".Traceback")注意到

警告

它没有记录.Traceback的存储位置,也没有显示,并且会随时更改。

所以很可能改用traceback()
tr <- traceback()
all.equal(tr, .Traceback)
#R [1] TRUE

关于r - 为什么.Traceback将长字符串分成两部分?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/51405549/

10-09 08:55