Подтвердить что ты не робот

Что делать с несовершенными, но полезными функциями?

Я мог бы также назвать этот вопрос: "Это достаточно хорошо для 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?

У меня есть две основные проблемы:

  • Функции, похоже, не имеют согласованного наложения. Это просто набор функций, которые делают много разных вещей.
  • Мой код не всегда самый красивый. Я пытался его очистить, поскольку я выучили более лучшие методы кодирования, но производя R Core-достойные красивые код не находится в карточках.

Веб-страница CRAN удивительно лишена рекомендаций по публикации. Должен ли я отправлять сообщения в CRAN, учитывая, что некоторые люди посчитают это полезным, но что он в каком-то смысле навсегда заблокирует R, чтобы иметь некоторые довольно основные имена функций? Или есть другое место, где я могу использовать команду install.packages-like для установки? Примечание. Я бы предпочел не размещать пакет на веб-странице и иметь людей для запоминания URL-адреса для установки пакета (не в последнюю очередь для проблем с управлением версиями).

4b9b3361

Ответ 1

Большинство пакетов должны быть коллекциями связанных функций с очевидной целью, поэтому полезно было бы попытаться сгруппировать то, что у вас есть, и посмотреть, можете ли вы их классифицировать. Несколько меньших пакетов лучше, чем один огромный непоследовательный пакет.

Тем не менее, есть несколько пакетов, которые представляют собой коллекцию различных служебных функций, в первую очередь Hmisc и gregmisc, поэтому все в порядке. Если у вас есть только несколько таких функций, возможно, стоит обратиться к автору некоторых из разных пакетов и посмотреть, разрешат ли они включить ваш код в свой пакет.

Что касается написания красивого кода, самое важное, что вы можете сделать, это использовать руководство по стилю.

Ответ 2

Я бы использовал http://r-forge.r-project.org/. В верхней части страницы:

R-Forge предлагает центральную платформу для разработки пакетов R, R-связанное программное обеспечение и дальнейшие проекты. Он основан на FusionForge предлагая легкий доступ к лучшим в SVN, ежедневно построенный и проверенный пакеты, списки рассылки, отслеживание ошибок, доски объявлений/форумы, сайт хостинг, постоянное архивирование файлов, полное резервное копирование и общий веб-интерфейс введение.

Ответ 3

По моему мнению, не стоит делать материал такого типа в упаковках.
Misc-пакеты существуют, но в основном по историческим причинам и/или из-за их авторитетных авторов, см. Frank Harrell Hmisc.

Я вижу три основные причины, по которым этот выбор не подходит для разнородного набора функций.

  1. По большому счету только 7000 пакетов на CRAN. Маловероятно, что ваш пакет будет выбран, если он не нацелен на определенное поле, и даже когда это происходит, вполне возможно, что другие установленные пакеты будут делать то же самое. Поэтому ваша посылка должна также иметь оригинальное/лучшее решение проблемы, с которой она связана.

  2. Хранилища, и в частности CRAN, ориентированы на задачи, что предполагает, что функции пакетов должны решать согласованную задачу. И на то есть веская причина: нет смысла загружать целый пакет, скажем, с 50 автономными функциями, когда мне нужна только пара из них. Вместо этого, если пакет решает конкретную проблему с данными, мне, скорее всего, понадобится большинство (если не все) из них.

  3. Репозитории R имеют тенденцию маскировать содержимое. В отличие от технических блогов, вы не сразу видите источник функций. Вам необходимо скачать отдельный пакет с исходным кодом, и это связано с большими издержками из-за структуры пакета, в которой скрыты фактические функции, которые вы хотите показать, а остальные должны прочитать.

На мой взгляд, лучшее место для общих удобных функций - это сайты типа GitHub. По факту:

  1. Один сразу же читает их с комфортом подсветки синтаксиса. Если они интересны, их можно вставить в R, чтобы попробовать и, возможно, сохранить их, в противном случае нужно просто перейти к следующей функции.

  2. Существует возможность организации кода, но без всех ограничений реального пакета. Аналогичные функции могут находиться в одном и том же файле, а согласованные файлы в одной подпапке.

  3. Вы можете показать свои идеи другим простым способом. Файл readme может сразу стать своего рода мини-страницей (через уценку). В сравнении CRAN довольно жесткий.

Существует множество других преимуществ (история изменений, принятие вкладов, страницы GitHub), которые могут вас заинтересовать или не заинтересовать.

Конечно, после того, как несколько функций вырастут в устойчивом последовательном направлении, вы превратите их в настоящий пакет CRAN. Кроме того, потому что метод копирования и вставки, чтобы попробовать их, становится неудобным.

РЕДАКТИРОВАТЬ: В настоящее время есть альтернативы GitHub, которые также могут быть приняты во внимание, и GitHub стал распространенным способом распространения пакетов, еще не готовых для CRAN, или интеграции официальной страницы распространения CRAN.