我正在使用R中的效果包来导出(和绘制)复杂线性模型的效果。
当我使用allEffects(linearModel)
时,我可以在屏幕上看到结果并像往常一样将其保存到pdf文件中。由于该模型有许多术语,因此输出无效。
因此,我使用effects(someTerm, linearModel)
专注于感兴趣的条款,屏幕上的结果是我需要的。但是,将其保存为pdf文件时,该文件不包含有用的输出(尽管它占用3.5Kb的空间)。控制台上的R没有错误消息。
为了便于理解,我创建了一个简单的数据集和一个用于生成效果图的脚本,就像我尝试使用" real"模型。
factorData.csv
A,B,C,y
a1,b1,c1,3
a1,b2,c1,4
a2,b1,c1,5
a2,b2,c1,6
a1,b1,c1,2
a1,b1,c2,3.5
a1,b2,c2,4
a2,b1,c2,5.1
a2,b2,c2,6.2
plotEffect.r
require(effects)
dataFile <- '/tmp/factorData.csv'
effectABfile <- '/tmp/effect_AB.pdf'
effectABCfile <- '/tmp/effect_ABC.pdf'
allEffectFile <- '/tmp/lm_eff.pdf'
df <- read.csv(file=dataFile,header=TRUE,sep=',')
linearModel <- lm(y~A*B*C,data=df)
lm_eff <- allEffects(linearModel)
pdf(file=effectABfile)
plot(effect('A:B',linearModel))
dev.off()
pdf(file=allEffectFile)
plot(lm_eff)
dev.off()
pdf(file=effectABCfile)
plot(Effect(c('A','B','C'),linearModel))
dev.off()
如您所见,我尝试了allEffects
,effect
和Effect
; allEffects
是唯一适合我的人。请注意,该脚本假定数据放在/tmp/factorData.csv
中 - 您可能需要更改路径。我还随机化了生成绘图的顺序,但没有效果。
我在其他地方查看了stackoverflow,saving plots to pdfs fails是最接近的,但是那里的建议(在每个情节之后发出dev.off()
来关闭pdf文件)是我的意思已经如 plotEffect.r 中所见。
我在两台机器上尝试了这个脚本,每台机器运行Lubuntu 14.04.1 64位,R版本3.0.2,最新的效果包使用install.packages
安装在R中。结果是一样的。
我非常感谢如何解决将此情节类型保存(实例)为pdf的问题。
修复/解决方法
正如@Roland在下面的评论中所建议的那样,如果您希望将网格图(例如此实例中的effects
图的输出)保存为pdf文件,则生成更好/更可靠单独/手动绘制(而不是在脚本中)。对于基本图形甚至ggplot2图形来说,它似乎不是(尽可能多)一个问题,我从来没有遇到过这个问题/过去需要这种解决方法。感谢@Roland建议修复此问题!
@Roland还补充说Sys.sleep()可能有助于脚本。虽然在我的情况下没有这样做,但我发现可以粘贴几个这样的绘图命令,R会将它们作为批处理运行,将图正确保存为pdf。因此,我认为应该可以通过采取以下步骤来恢复运行脚本的许多好处:
pdf()
,plot()
和dev.off()
三元组命令的文本表示或者,您可能希望在步骤3和4中使用命令行 - How can I load a file's contents into the clipboard?提供有用的建议。
这个两阶段程序是一个合理的解决方法,但可以说不应该有它。