我同样可以给这个问题加上标题,“对于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形式在Internet上的某个位置提供这些内容(例如,将它们作为纯文本功能发布在博客上不是我想要的),以便维护更容易,以便我和其他人可以访问我可以从任何一台计算机上访问它们。逻辑上的事情是用它们制作一个程序包,然后将它们发布到CRAN中-实际上我已经将它们打包了。但是,此功能集合是否适合CRAN软件包?
我有两个主要问题:
做许多不同事情的功能的集合。
学会了更好的编码实践,但是产生了R核心值(value)的美丽
卡中没有代码。
CRAN网页出人意料地失去了发布指南。考虑到某些人会发现它有用,但从某种意义上说它将永远锁定R使其占用一些非常基本的函数名,因此我应该发布到CRAN吗?还是有另一个地方可以使用类似install.packages的命令进行安装?请注意,我宁愿避免将软件包发布到网页上,而要让人们记住要安装软件包的URL(尤其是版本控制问题)。
最佳答案
大多数软件包应该是具有明显目的的相关功能的集合,因此,要做的一件有用的事情是尝试将您所拥有的东西归为一组,看看是否可以对其进行分类。几个较小的程序包比一个巨大的非相干程序包要好。
就是说,有些软件包是杂项实用程序功能的集合,最著名的是Hmisc
和gregmisc
,所以可以做这种事情。如果您只有一些这样的功能,可能值得联系某些杂项软件包的作者,看看它们是否会让您将代码包含在其软件包中。
至于编写漂亮的代码,您可以做的最重要的事情就是使用a style guide。