2012-06-21 172 views
1

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

错误的文件(文件,ifelse(追加,“A”,“W”)): 无法打开连接 另外:警告消息: 在文件(文件,ifelse(追加, “A”, “W”)): 无法打开文件 'P:/我的文档/ 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专业机器上使用R-2.15.0。如果有人能帮助我,我会非常感激。 谢谢。

+0

我以前有过这个。发生这种情况的原因是,当操作系统仍未完成上一个操作时,您正在尝试写入(追加)文件。要解决这个问题,可能你最好的选择是将数据追加到内存中的对象,然后只在循环完成时写入文件。 – Andrie

+0

我看到...但是我使用R2HTML包(HTML.data.frame,HTMLplot)中的一些特定函数以特定顺序将数据框架,图形和文本附加到HTML文件。如果我只是写文本,我想我可以将它附加到内存中的一个变量,并且只使用一个调用HTML函数来导出它,但在这里我不确定我可以做那样的事情。如果问题来自追加文件太快,你知道是否有办法告诉R在计算中的某些特定点放慢速度?无论如何,非常感谢您的回答。 – Vidac

+0

您正在写入一个HTML文件,它只是文本。所以明确地追加到角色矢量中是完全一样的。简单地捕获HTML()的输出,并使用'c()'将它与以前的结果相结合。然后在循环结束时将其转储到文件。这真的有用 - 我已经做到了。 – Andrie

回答

0

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