Pregunta

Igualmente podría haber titulado esta pregunta: "¿Es lo suficientemente bueno para Cran?"

Tengo una colección de funciones que he construido para tareas específicas. Algunas de estas son funciones de conveniencia:

# 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
}

Algunas son adiciones menores que han demostrado ser útiles para responder a la pregunta común:

# 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)
}

Las más importantes son las extensiones a las clases existentes que no se pueden encontrar en ningún otro lugar (por ejemplo, una función de panel de CDF para gráficos de celosía, varias funciones de salida de látex y látex, clases para manejar y convertir entre tipos de objetos geoespaciales y realizar varias operaciones similares a SIG como como superposiciones).

Me gustaría que estén disponibles en algún lugar de Internet en forma de R-date (por ejemplo, publicarlos en un blog, ya que las funciones de texto sin formato no es lo que estoy buscando), por lo que el mantenimiento es más fácil y que yo y otros puedan acceder ellos de cualquier computadora a la que vaya. Lo lógico que debe hacer es hacer un paquete con ellos y publicarlos en Cran, y de hecho ya los tengo empaquetados. ¿Pero esta colección de funciones es adecuada para un paquete CRAN?

Tengo dos preocupaciones principales:

  1. Las funciones no parecen tener una superposición coherente. Es solo una colección de funciones que hacen muchas cosas diferentes.
  2. Mi código no siempre es el más bonito. He tratado de limpiarlo ya que aprendí mejores prácticas de codificación, pero producir un código hermoso digna de un núcleo no está en las tarjetas.

La página web de CRAN está sorprendentemente despreocupada por las pautas sobre la publicación. ¿Debo publicarle a CRAN, dado que algunas personas les resultarán útil, pero que en cierto sentido se bloqueará para siempre que se tomen algunos nombres de funciones bastante básicos? ¿O hay otro lugar en el que pueda usar un comando de instalación de instalación para instalar? Tenga en cuenta que prefiero evitar publicar el paquete en una página web y hacer que las personas tengan que memorizar la URL para instalar el paquete (no menos importante para problemas de control de versiones).

¿Fue útil?

Solución

La mayoría de los paquetes deben ser colecciones de funciones relacionadas con un propósito obvio, por lo que algo útil es intentar agrupar lo que tiene juntos y ver si puede clasificarlas. Varios paquetes más pequeños son mejores que un gran paquete incoherente.

Dicho esto, hay algunos paquetes que son colecciones de funciones de utilidad misceláneas, sobre todo Hmisc y gregmisc, entonces está bien hacer ese tipo de cosas. Si solo tiene algunas funciones como esa, puede valer la pena contactar al autor de algunos de los paquetes Misc y ver si le permiten incluir su código en su paquete.

En cuanto a escribir un código bonito, lo más importante que puede hacer es usar Una guía de estilo.

Otros consejos

yo usaría http://r-forge.r-project.org/. Desde la parte superior de la página:

R-Forge ofrece una plataforma central para el desarrollo de paquetes R, software Related R y proyectos adicionales. Se basa en FusionForge que ofrece un fácil acceso a los mejores en SVN, paquetes diarios construidos y marcados, listas de correo, seguimiento de errores, tableros de mensajes/foros, alojamiento de sitios, archivo de archivos permanente, copias de seguridad completas y administración total basada en la web.

En mi opinión, no es una buena idea hacer este tipo de material en paquetes.
Varios paquetes existe, pero principalmente por razones históricas y/o debido a sus contribuyentes autorizados, ver Frank Harrell Hmisc.

Veo tres razones principales por la cual esta elección no está en forma para una colección dispar de funciones.

  1. En general, hay 7000 paquetes en CRAN solamente. Es poco probable que su paquete se elija si no se dirige a un campo específico y, incluso cuando esto sucede, es muy posible que otros paquetes establecidos hagan lo mismo. Por lo tanto, su paquete también debe lucir una solución original/mejor al problema con el que trata.

  2. Los repositorios y CRAN en particular están orientados a las tareas, lo que sugiere que las funciones de los paquetes deben abordar una tarea coherente. Y por una buena razón: no tiene sentido descargar un paquete completo con, por ejemplo, 50 funciones autónomas, cuando necesito solo un par de ellas. En cambio, si un paquete resuelve un problema de datos específico mío, lo más probable es que necesite la mayoría (si no todos) de ellos.

  3. Los repositorios R tienden a enmascarar el contenido. Al contrario de los blogs tecnológicos, no ve de inmediato la fuente de las funciones. Debe descargar un paquete de origen separado y hay muchas sobrecargas debido a la estructura del paquete, que entierra las funciones reales que está dispuesto a mostrar y los demás necesitan leer.

En mi opinión, el mejor lugar para las funciones generales de conveniencia, son sitios como Github. En realidad:

  1. Uno los lee inmediatamente con la comodidad de la sintaxis. Si son interesantes, se pueden pegar en R para intentarlo y posiblemente mantenerlos, de lo contrario uno simplemente pasa para leer la siguiente función.

  2. Existe la posibilidad de organizar el código, pero sin todas las limitaciones de un paquete real. Funciones similares pueden ir en el mismo archivo y archivos coherentes en la misma subcarpeta.

  3. Puedes mostrar tus ideas a los demás de una manera simple. El archivo ReadMe puede convertirse inmediatamente en una especie de página web MINI (a través de Markdown). En comparación, CRAN es bastante rígido.

Hay muchos otros beneficios (historial de revisión, aceptación de contribuciones, páginas de GitHub), que pueden o no interesarle o no.

Por supuesto, después de que varias funciones crezcan en una dirección coherente estable, las convertirá en un paquete CRAN real. También porque el método de copiar y pegar para probarlos se vuelve inconveniente.

Editar: Hoy en día hay alternativas a GitHub, que también se pueden tener en cuenta y GitHub se ha convertido en una forma común de distribuir paquetes que aún no están listos para CRAN o para integrar la página oficial de distribución de CRAN.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top