【问题标题】:R2HTML cannot open connectionR2HTML 无法打开连接
【发布时间】:2012-06-21 13:31:38
【问题描述】:

我正在生成一个重复的 HTML 报告,显示用 R 计算的表格和图形。我正在使用 R2HTML 包中的函数,嵌入在 for 循环中。我在我的机器上没有管理员权限。 在计算的某个时刻,我有时会收到以下错误:

文件中的错误(文件,ifelse(追加,“a”,“w”)): 无法打开连接 另外:警告信息: 在 file(file, ifelse(append, "a", "w")) : 无法打开文件“P:/My Documents/R/test.html”:权限被拒绝

这不会在每次运行时发生,也不会在代码的同一点发生。 当我尝试运行以下简单代码时,我会遇到同样的错误:

require( R2HTML)

.HTML.file = file.path( 'P:/My Documents/R' , 'test.html' )  
# To set the access path to the HTML file  that will be created

cat(paste("<html><head><title>", 'test.html', "</title></head>", sep = ""), file = .HTML.file , append = FALSE ) 
# To create and initiate the HTML file

for( i in 1:100 )
{
    HTML('Test')
}
# To write the same line to the HTML file repeteadly

大多数时候这个循环可以毫无问题地运行,但有时它会产生上述错误(有时在循环开始时,有时在循环结束时)。 有人知道这是什么原因吗?我在 Windows xp pro 机器上使用 R-2.15.0。如果有人可以帮助我解决这个问题,我将非常感激。 谢谢。

【问题讨论】:

  • 我以前有过这个。发生这种情况是因为您在操作系统仍未完成之前的操作时尝试写入(追加)到文件。要解决这个问题,最好的选择可能是将数据附加到内存中的对象,然后仅在循环完成时写入文件。
  • 我明白了...但是,我正在使用 R2HTML 包 ( HTML.data.frame, HTMLplot ) 中的一些特定函数以特定顺序将数据框、图形和文本附加到 HTML 文件中。如果我只是写文本,我想我可以将它附加到内存中的一个变量中,并且只使用一次对 HTML 函数的调用来导出它,但在这里我不确定我是否可以做这样的事情。如果问题来自于附加文件太快,你知道是否有办法告诉 R 在计算中的某些特定点放慢速度?无论如何,非常感谢您的回答。
  • 您正在写入一个 HTML 文件,它只是文本。所以显然附加到字符向量是完全相同的事情。只需捕获HTML() 的输出,然后使用c() 将其与您之前的结果相结合。然后在循环结束时,将其转储到文件中。这真的有效 - 我已经做到了。
  • 好的,这似乎是一个不错的方法。从我所见,HTML 函数附加了.HTML.file 中指定的连接并始终返回NULL。很抱歉提出这样一个基本问题,但我怎样才能捕获函数的输出而不是将其附加到连接中。我无法从HTML() 帮助页面中弄清楚这一点。再次感谢您的帮助。
  • 在谷歌中输入[r] capture output,看看会发生什么。

标签: r


【解决方案1】:

正如 Andrie 在 cmets 中所建议的,解决方案是在字符串对象中捕获 R2HTML 函数的输出,并在循环后仅使用一次对 HTML 函数的调用来创建 HTML 文件。

【讨论】:

    猜你喜欢
    • 2011-09-18
    • 2015-09-11
    • 2015-09-03
    • 2010-12-01
    • 2014-05-08
    • 2012-10-12
    • 2013-03-10
    相关资源
    最近更新 更多