前面的废话:
因为我每次写代码都是任务导向型的,就没想过在参数选择,异常处理上做努力。一般就是把代码备注完可修改的地方,没想过去做什么规范的处理。这次必须处理这些东西,也只能学习起来。
参数设置
参数给定的可能会有好几种选择,首先要确认是不是属于默认的那些类别,使用的是match.arg()
这个函数,如果是match.argue(c("gauss","rect","ep"),several.ok = TRUE)
还是能够允许用缩写来指代全部的。指定several.ok = FALSE
就关闭了缩写匹配。
接着就是根据不同的参数选择不一样的方案,使用的是switch()
函数
#require跟library差不多,require专用在函数当中,不会报错,但是会给出warning
require(stats)
## Extends the example for 'switch'
center <- function(x, type = c("mean", "median", "trimmed")) {
#用match.arg()先把type转变成标准想要的值,判断输入参数
type <- match.arg(type)
#逗号区分开操作,如果是复杂操作使用{}框起来
switch(type,
mean = mean(x),
median = median(x),
trimmed = mean(x, trim = .1))
}
x <- rcauchy(10)
center(x, "t") # Works
center(x, "med") # Works
try(center(x, "m")) # Error
stopifnot(identical(center(x), center(x, "mean")),
identical(center(x, NULL), center(x, "mean")) )
## Allowing more than one match:
match.arg(c("gauss", "rect", "ep"),
c("gaussian", "epanechnikov", "rectangular", "triangular"),
several.ok = TRUE)
异常处理
文件夹处理
当遇到很多的文件需要读取路径,然后批量读取为向量,并且需要根据样本的数量赋予后续步骤处理参数的情况,必须要使用文本处理。这边以一个我处理MNase-seq文件的Rscript为示例。
在MATLAB当中我已经把文件都处理完,变成了每个染色体一个CSV文件,然后我们可以选择要计算的样本文件夹,写入一个文件sample_list.txt
里面。这里要注意read.table("FILE_PATH",header = FALSE,stringAsFactors = FALSE)
把读取设为非因子很重要,不然后面处理没完没了一直没法按照字符串来读取。
接着用scan(file = "sample1.csv", sep = ",")
函数来读取reads count数字,注意scan只能用来读取数字,不能执行read.table和read.csv的功能。