如何处理不完善但有用的功能?

Ari*_*man 13 r package cran

我同样可以提出这个问题,"这对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
}
Run Code Online (Sandbox Code Playgroud)

有些是次要的补充,已经证明在回答常见的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)
}
Run Code Online (Sandbox Code Playgroud)

最重要的是在其他任何地方都找不到的现有类的扩展(例如,格子图的CDF面板函数,各种xtable和LaTeX输出函数,用于处理和转换地理空间对象类型的类以及执行各种类似GIS的操作,例如作为叠加).

我想在互联网上以R-ized格式提供这些内容(例如将它们发布在博客上,因为纯文本功能不是我正在寻找的),因此维护更容易,以便我和其他人可以访问他们来自我去的任何电脑.合乎逻辑的做法是用它们制作一个包并将它们发布到CRAN - 事实上我已经将它们打包了.但这个功能集合是否适合CRAN包?

我有两个主要问题:

  1. 这些功能似乎没有任何连贯的叠加.它只是一系列功能,可以做很多不同的事情.
  2. 我的代码并不总是最漂亮的.我已经尝试清理它,因为我学习了更好的编码实践,但是生成R Core值得的漂亮代码并不在卡片中.

CRAN网页令人惊讶地失去了发布指南.我应该发布到CRAN,因为有些人会觉得它很有用但是在某种意义上它会永远锁定R使一些非常基本的函数名称被占用?或者是否有另一个地方我可以使用install.packages-like命令来安装?注意我宁愿避免将包发布到网页,并让人们记住URL来安装包(尤其是版本控制问题).

Rom*_*rik 5

我会用http://r-forge.r-project.org/.从页面顶部:

R-Forge为R软件包,R相关软件和其他项目的开发提供了一个中央平台.它基于FusionForge,可以轻松访问最好的SVN,每日构建和检查包,邮件列表,错误跟踪,留言板/论坛,站点托管,永久文件存档,完整备份和基于Web的总管理.

  • `install.packages( "mypackage的",回购= "http://r-forge.r-project.org")`.我在使用R-forge教授软件包等时遇到的*only*问题是r-forge的更改不会传播到构建的软件包24小时,因此我有时会使用最新版本的我自己的存储库上的包. (2认同)

Ric*_*ton 4

大多数包应该是具有明显目的的相关功能的集合,因此有用的做法是尝试将您拥有的功能组合在一起,看看是否可以对它们进行分类。几个较小的包比一个巨大的、不连贯的包要好。

也就是说,有一些包是各种实用函数的集合,最著名的是Hmiscgregmisc,所以做这类事情是可以的。如果您只有几个这样的函数,那么可能值得联系一些杂项包的作者,看看他们是否允许您将代码包含在他们的包中。

至于编写漂亮的代码,您可以做的最重要的事情就是使用样式指南