做什么用的不完美但很实用的功能呢?

问题描述 投票:13回答:3

我同样可以题为有这个问题,“这是为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包?

我有两个主要关注点:

  1. 该功能似乎并没有任何的相干叠加。这只是一个的那些很多不同的东西收藏功能。
  2. 我的代码并不总是最美丽的。我试图把它清理干净,因为我学会了更好的编码实践,但制备R核心,值得漂亮的代码是不是在卡。

该CRAN网页是令人惊讶的被剥夺了上发布准则。我应该张贴到CRAN,因为有些人会发现它很有用,但它会在某种意义上永远锁定R导入已采取了一些非常基本的功能名称?还是有我可以使用install.packages般的命令来安装其他地方吗?注意:我宁愿避免张贴包到一个网页,让人们不得不记住的网址,安装软件包(不至少版本控制问题)。

r package cran
3个回答
4
投票

大多数包应该是相关功能集合有明显的目的,这样做有用的事是尝试和组你有什么在一起,看你能不能把它们归类。几个较小的包比一个庞大而杂乱的包。

这就是说,有一些程序是杂项实用功能的集合,最显着的Hmiscgregmisc,所以它是好的做那种事情。如果你只是有一个这样的一些功能,但可能值得接触一些其它包的作者,看他们是否会告诉你包括在他们的包代码。

至于写漂亮的代码,你可以做的最重要的事情就是用a style guide


5
投票

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

R-锻造提供了一个中央平台的R程序包,R相关的软件和更多的项目的发展。它是基于FusionForge方便客人在SVN最好的,每天建成并检查包裹,邮件列表,bug跟踪,留言板/论坛,网站托管,永久存档的文件,完整备份,总基于Web的管理。


1
投票

在我看来,这不是一个好主意,让这种类型的材料到封装。 MISC-包确实存在,但主要是由于历史的原因和/或由于其权威性的贡献者,见弗兰克勒尔Hmisc。

我看到三个最主要的原因,这个选择确实不适合的功能完全不同的集合。

  1. 有大体上只CRAN 7000包。这是不可能的,如果它不针对特定的领域,即使出现这种情况,很可能是其他建立包做同样的你的包将被选择。因此,你的包也应该炫耀原来的/更好的解决它所处理的问题。
  2. 库和CRAN尤其是面向任务的,这表明软件包的功能应该解决一个连贯的任务。而对于一个很好的理由:有在下载整个包说,50个自治职能,当我只需要他们夫妇没有任何意义。相反,如果一个包解决了我的一个特定的数据问题,比我将最有可能最需要的(如果不是全部)人。
  3. ř库往往掩盖的内容。相反,科技博客,你不要马上查看函数源。你需要下载一个单独的源码包,有一个很大的开销,由于封装结构,埋葬的实际功能,你愿意展示和其他人需要阅读。

在我看来,对于一般的便利功能最好的地方,像GitHub的网站。事实上:

  1. 一个立即用语法高亮的舒适读取它们。如果他们是有趣的,他们可以在R上粘贴给一个尝试,可能留住他们,否则一个简单的步骤在读下一个功能。
  2. 没有组织代码的可能性,但没有实际包的所有限制。类似的功能可能会走在同一个文件和连贯的文件在同一子文件夹。
  3. 您可以显示简单的方式你的想法给了别人。自述文件马上就可以成为一种迷你网页(通过降价)的。相比之下CRAN是相当严格的。

还有很多其他福利(修订历史记录,接受捐款,GitHub的页面),这可能会或可能不会感兴趣。

当然,经过几个功能生长在一个稳定一致的方向,你就会把它们变成一个实际的CRAN包。也正因为复制和粘贴的方法来尝试一下变得那么不方便。

编辑:现在有替代GitHub上,可以考虑也和GitHub上已经成为软件包分发尚未准备好CRAN或官方CRAN分布页面整合了常见的方式。

© www.soinside.com 2019 - 2024. All rights reserved.