这是关于以下代码块的两部分问题。
> ## ran rm(list = ls()) prior to the following
> closeAllConnections()
> tc <- textConnection("messages", "w")
> isOpen(tc)
# [1] TRUE
> close(tc)
> ls()
# [1] "messages" "tc"
> is.object(tc)
# [1] TRUE
> class(tc)
# [1] "textConnection" "connection"
> tc
# Error in summary.connection(x) : invalid connection
为什么tc
在ls()
连接关闭时立即从对象列表tc
中删除,invalid connection
是什么意思? R是否有理由将tc
保留在列表中?
有没有办法在关闭后立即将其从对象列表中删除?如果没有必要,我真的不想打电话给rm()
。也许我在扫描帮助文件时错过了某个地方的争论。
这很重要的原因是因为我有一个名为list.objects
的函数在运行上面的代码后返回错误,但是没有(可能因为tc
有两个类)。
答案 0 :(得分:1)
tc
是一个包含对某个州的引用的变量。没有特别的原因,close()
的调用应附带内置rm()
。这就像期望电视遥控器在你通过按下电源按钮关闭电视后自行消失。
我认为您必须致电rm(tc)
将其删除。
答案 1 :(得分:1)
对于1.,tc不会从对象列表中删除,因为close
不会删除用于包含指向连接的指针的变量。相反,close会关闭指针并将其从打开的文件连接列表中有效地删除(请参阅showConnections
)。包含指针的变量仍然存在,只是指针指向无处。这解释了为什么在关闭它后键入tc
时出现错误,您正试图查看无处可用的文件连接。
对于2. close(tc); rm(tc)
有什么困难?几乎没有比实际存在“删除我的第一个参数”参数更多的打字。