我有一个脚本接受这种形式的一些参数:
Rscript script.R -o=output -x=density.xvg -t=temperature.xvg -u=potential.xvg -p=pressuree.xvg -...
所有文件都是.xvg
(文本文件),并按列结构化。
# title "Secondary Structure"
# xaxis label "Time (ns)"
# yaxis label "Number of Residues"
#TYPE xy
0 637 180 201 7 94 129 300 0 47 1
1 617 189 191 11 99 121 294 5 48 1
2 625 183 198 7 97 130 290 0 53 1
3 625 180 195 5 102 125 300 0 51 1
我从bash脚本调用R脚本,该脚本设置所有可能的标志,即使某些文件不存在。
R脚本应检查文件和变量是否存在并执行特定功能(绘图温度曲线,绘图密度,...)。
脚本首先检查是否设置了标志并将其值(文件名)分配给变量(对于-u=potential.xvg
我得到file.potential <- "potential.xvg"
)。
然后,脚本使用
检查变量和文件是否存在if (!exists("file.potential")) {
cat('the variable "',file.potential,'" is not set\n')
} else {
if (file.exists(paste(file.potential))) {
cat("ok\n")
} else {
cat('the file "',paste(file.potential),'" does not exist\n')
}
}
因为我有几个标志,我写了一个函数:
checkExistance <- function(a) {
if (!exists("a")) {
cat('the variable "',a,'" is not set\n')
} else {
if (file.exists(paste(a))) {
cat("ok\n")
} else {
cat('the file "',paste(a),'" does not exist\n')
}
}
}
正确检查变量的存在,但不存在文件。显然,paste(a)
会返回a
而不是potential.xvg
。
我在一个单独的文件中定义了所有函数,我在开头提供了源代码,但我也尝试在主脚本中定义函数。
有什么问题?
我用这个函数解析参数(-d = value1):
parseArgs <- function(x) strsplit (sub("^-","",x), "=")
argsDF <- as.data.frame(do.call("rbind", parseArgs(args)))
argsL <- as.list(as.character(argsDF$V2))
names(argsL) <- (argsDF$V1)
然后
if(is.null(argsL$x)) print("density file not supplied") else file.density <- argsDF$V2[which(argsDF$V1 == "x")]
如果我使用exists("a")
(或exists("file.density")
)检查是否存在,则可以正常运行,但exists(a)
会给我这个错误:
Error in exists(a) : invalid first argument