我同样可以题为有这个问题,“这是为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)
}
最重要的是扩展现有的类不能找到其他地方(例如,对于晶格图,各种xtable和乳胶输出函数,类用于处理和地理空间对象类型之间的转换和执行各种GIS样的操作,例如一个CDF面板功能作为覆盖)。
我想使这些地方提供的R-化的形式在互联网上(如张贴他们在博客上为纯文本的功能是不是我要找的),使维护更容易,让我和其他人可以访问他们从任何计算机,我去。做合乎逻辑的做法是做一个包装了出来,并将它们发布到CRAN - 事实上我已经将其打包。但就是这个集合的功能适合CRAN包?
我有两个主要关注点:
该CRAN网页是令人惊讶的被剥夺了上发布准则。我应该张贴到CRAN,因为有些人会发现它很有用,但它会在某种意义上永远锁定R导入已采取了一些非常基本的功能名称?还是有我可以使用install.packages般的命令来安装其他地方吗?注意:我宁愿避免张贴包到一个网页,让人们不得不记住的网址,安装软件包(不至少版本控制问题)。
大多数包应该是相关功能集合有明显的目的,这样做有用的事是尝试和组你有什么在一起,看你能不能把它们归类。几个较小的包比一个庞大而杂乱的包。
这就是说,有一些程序是杂项实用功能的集合,最显着的Hmisc
和gregmisc
,所以它是好的做那种事情。如果你只是有一个这样的一些功能,但可能值得接触一些其它包的作者,看他们是否会告诉你包括在他们的包代码。
至于写漂亮的代码,你可以做的最重要的事情就是用a style guide。
我会用http://r-forge.r-project.org/。从页面顶部:
R-锻造提供了一个中央平台的R程序包,R相关的软件和更多的项目的发展。它是基于FusionForge方便客人在SVN最好的,每天建成并检查包裹,邮件列表,bug跟踪,留言板/论坛,网站托管,永久存档的文件,完整备份,总基于Web的管理。
在我看来,这不是一个好主意,让这种类型的材料到封装。 MISC-包确实存在,但主要是由于历史的原因和/或由于其权威性的贡献者,见弗兰克勒尔Hmisc。
我看到三个最主要的原因,这个选择确实不适合的功能完全不同的集合。
在我看来,对于一般的便利功能最好的地方,像GitHub的网站。事实上:
还有很多其他福利(修订历史记录,接受捐款,GitHub的页面),这可能会或可能不会感兴趣。
当然,经过几个功能生长在一个稳定一致的方向,你就会把它们变成一个实际的CRAN包。也正因为复制和粘贴的方法来尝试一下变得那么不方便。
编辑:现在有替代GitHub上,可以考虑也和GitHub上已经成为软件包分发尚未准备好CRAN或官方CRAN分布页面整合了常见的方式。