我同样可以将这个问题命名为“对 CRAN 来说是否足够好?”
我有一组为特定任务构建的函数。其中一些是便利功能:
# Returns odds/evens from a vector
odds=function(vec) {
stopifnot(class(vec)=="integer")
ret = vec[fpart(vec/2)!=0]
ret
}
evens=function(vec) {
stopifnot(class(vec)=="integer")
ret = vec[fpart(vec/2)==0]
ret
}
有些是已被证明对回答常见 SO 问题有用的小补充:
# Shift a vector over by n spots
# wrap adds the entry at the beginning to the end
# pad does nothing unless wrap is false, in which case it specifies whether to pad with NAs
shift <- function(vec,n=1,wrap=TRUE,pad=FALSE) {
if(length(vec)<abs(n)) {
#stop("Length of vector must be greater than the magnitude of n \n")
}
if(n==0) {
return(vec)
} else if(length(vec)==n) {
# return empty
length(vec) <- 0
return(vec)
} else if(n>0) {
returnvec <- vec[seq(n+1,length(vec) )]
if(wrap) {
returnvec <- c(returnvec,vec[seq(n)])
} else if(pad) {
returnvec <- c(returnvec,rep(NA,n))
}
} else if(n<0) {
returnvec <- vec[seq(1,length(vec)-abs(n))]
if(wrap) {
returnvec <- c( vec[seq(length(vec)-abs(n)+1,length(vec))], returnvec )
} else if(pad) {
returnvec <- c( rep(NA,abs(n)), returnvec )
}
}
return(returnvec)
}
最重要的是对其他任何地方都找不到的现有类的扩展(例如,用于晶格图的 CDF 面板函数、各种 xtable 和 LaTeX 输出函数、用于处理和在地理空间对象类型之间转换以及执行各种类似 GIS 的操作的类,例如作为覆盖)。
我想以 R 化的形式在互联网上的某个地方提供这些(例如,将它们作为纯文本函数发布在博客上不是我想要的),以便维护更容易,以便我和其他人可以访问它们来自我使用的任何计算机。合乎逻辑的做法是用它们制作一个包裹并将它们邮寄到 CRAN——事实上我已经把它们打包好了。但是这个函数集合适合 CRAN 包吗?
我有两个主要担忧:
- 这些功能似乎没有任何连贯的覆盖。它只是做很多不同事情的函数的集合。
- 我的代码并不总是最漂亮的。当我学习了更好的编码实践时,我试图清理它,但是生成 R Core 值得漂亮的代码并不是在卡片中。
CRAN 网页令人惊讶地没有发布指南。我是否应该向 CRAN 发帖,因为有些人会发现它很有用,但在某种意义上它会永远锁定 R 以占用一些非常基本的函数名称?或者还有其他地方我可以使用类似 install.packages 的命令进行安装吗?注意我宁愿避免将包发布到网页上,并且让人们必须记住 URL 才能安装包(尤其是对于版本控制问题)。