关闭连接后立即删除连接对象

时间:2014-06-25 00:28:00

标签: r

这是关于以下代码块的两部分问题。

> ## 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
  1. 为什么tcls()连接关闭时立即从对象列表tc中删除,invalid connection是什么意思? R是否有理由将tc保留在列表中?

  2. 有没有办法在关闭后立即将其从对象列表中删除?如果没有必要,我真的不想打电话给rm()。也许我在扫描帮助文件时错过了某个地方的争论。

  3. 这很重要的原因是因为我有一个名为list.objects的函数在运行上面的代码后返回错误,但是没有(可能因为tc有两个类)。

2 个答案:

答案 0 :(得分:1)

tc是一个包含对某个州的引用的变量。没有特别的原因,close()的调用应附带内置rm()。这就像期望电视遥控器在你通过按下电源按钮关闭电视后自行消失。

我认为您必须致电rm(tc)将其删除。

答案 1 :(得分:1)

对于1.,tc不会从对象列表中删除,因为close不会删除用于包含指向连接的指针的变量。相反,close会关闭指针并将其从打开的文件连接列表中有效地删除(请参阅showConnections)。包含指针的变量仍然存在,只是指针指向无处。这解释了为什么在关闭它后键入tc时出现错误,您正试图查看无处可用的文件连接。

对于2. close(tc); rm(tc)有什么困难?几乎没有比实际存在“删除我的第一个参数”参数更多的打字。