【发布时间】: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