特定于平台的图形设备

时间:2009-10-03 23:30:03

标签: r

我想编写一个带有文件名的函数,在* nix平台上生成.pdf文件,在Windows平台上生成.wmf,文件名为6英寸,高度为4英寸。

graph <- function(filename){
setwd("graphics")
ext <- ifelse(.Platform$OS.type == "unix", "pdf", "wmf")
name <- paste(filename, ext, sep=".")
ifelse(.Platform$OS.type == "unix", pdf(name, width=6, height=4), wmf(name, width=6, height=4))
}

这是我的尝试,但我收到了这个错误

ans [test&amp; amp; !nas]&lt; - rep(yes,length.out = length(ans))[test&amp; :   替换的长度为零

任何想法?我觉得我忽略了什么。

2 个答案:

答案 0 :(得分:5)

这是一个更精致的功能版本。改进:

  • 不会弄乱您的工作目录
  • 通过从扩展名
  • 中查找设备功能来避免重复的if语句

- &GT;

graph <- function(filename) {
  ext <- if(.Platform$OS.type == "unix") "pdf" else "wmf"
  dev <- match.fun(ext)
  path <- paste("graphics/", filename, ".", ext, sep = "")

  dev(path, width = 6, height = 4)
}

答案 1 :(得分:2)

我认为问题是ifelse返回一个值,执行参数中的任何操作。我以前很难学到这一点: ifelse!=简写如果,ifelse = vectorized if。从帮助页面:

  

ifelse(test,yes,no)

     

'ifelse'返回一个相同的值   形状为'测试'即是        填充了从“是”或“否”中选择的元素        关于'test'的元素是'TRUE'还是'FALSE'。

所以只需使用:

if (.Platform$OS.type == "unix") {
  pdf(name, width=6, height=4) 
} else {
  wmf(name, width=6, height=4)
}