我想编写一个带有文件名的函数,在* 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; : 替换的长度为零
任何想法?我觉得我忽略了什么。
答案 0 :(得分:5)
这是一个更精致的功能版本。改进:
- &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)
}