我同样可以提出这个问题:“这对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-ized形式提供这些内容(例如将它们发布在博客上,因为纯文本功能不是我正在寻找的),因此维护更容易,所以我和其他人可以从我去过的任何电脑上访问它们。合乎逻辑的做法是从它们中创建一个包并将它们发布到CRAN - 事实上我已经把它们打包了。但这个功能集合是否适合CRAN包?
我有两个主要问题:
CRAN网页令人惊讶地失去了发布指南。我应该发布到CRAN,因为有些人会觉得它很有用但是在某种意义上它会永远锁定R使一些非常基本的函数名称被占用?或者是否有另一个地方我可以使用install.packages-like命令来安装?注意我宁愿避免将包发布到网页上,让人们记住URL来安装包(尤其是版本控制问题)。
答案 0 :(得分:5)
我会使用http://r-forge.r-project.org/。从页面顶部:
R-Forge为R软件包的开发提供了一个中央平台, R相关软件和进一步的项目。它基于FusionForge 提供轻松访问最好的SVN,每日建立和检查 包,邮件列表,错误跟踪,留言板/论坛,网站 托管,永久文件存档,完整备份和基于Web的总计 施用
答案 1 :(得分:4)
大多数软件包应该是具有明显目的的相关函数的集合,因此有用的事情是尝试将所有内容组合在一起,并查看是否可以对它们进行分类。几个较小的封装比一个非常不连贯的封装更好。
也就是说,有些软件包是各种实用函数的集合,最值得注意的是Hmisc
和gregmisc
,所以可以这样做。如果您只是有一些这样的功能,可能需要联系一些misc软件包的作者,看看他们是否允许您将代码包含在他们的软件包中。
至于编写漂亮的代码,你可以做的最重要的事情是使用a style guide。
答案 2 :(得分:1)
在我看来,将这种类型的材料制成包装并不是一个好主意 Misc-packages 确实存在,但主要是出于历史原因和/或由于其权威贡献者,请参阅Frank Harrell Hmisc。
我看到这个选择不适合不同功能集合的三个主要原因。
仅在CRAN上有7000个大包。如果不针对特定字段,则不太可能选择您的软件包,即使发生这种情况,其他已建立的软件包也很可能会这样做。因此,您的包装还应该针对其处理的问题提供原创/更好的解决方案。
存储库,特别是CRAN,是面向任务的,它建议包装&#39;功能应该解决一个连贯的任务。并且有一个很好的理由:当我只需要其中几个时,下载一个包含50个自主功能的整个软件包是没有意义的。相反,如果一个包解决了我的特定数据问题,那么我最有可能需要它们(如果不是全部的话)。
R存储库倾向于掩盖内容。与科技博客相反,您不会立即看到功能&#39;资源。您需要下载一个单独的源程序包,由于程序包结构会产生大量开销,这会掩盖您愿意显示的实际功能以及其他需要阅读的功能。
在我看来,一般便利功能的最佳位置是像GitHub这样的网站。事实上:
立即用语法高亮显示它们。如果它们很有趣,可以将它们粘贴在R中进行尝试并可能保留它们,否则只需简单地跳过来阅读下一个功能。
有可能组织代码,但没有实际包的所有约束。类似的函数可能放在同一个子文件夹中的同一个文件和相干文件中。
您可以通过简单的方式向其他人展示您的想法。自述文件可以立即成为一种迷你网页(通过降价)。相比之下,CRAN非常严格。
还有很多其他好处(修订历史记录,接受贡献,GitHub页面),可能会或可能不会让您感兴趣。
当然,在几个函数以稳定的相干方向增长之后,您将把它们转换为实际的CRAN包。另外,因为尝试复制和粘贴方法会变得不方便。
编辑:现在有GitHub的替代方案,也可以考虑,GitHub已成为分发尚未准备好CRAN或整合官方CRAN分发页面的常用方法。