Существует ли встроенная функция для нахождения режима?

  • Во-первых, как уже отмечали другие,

§13.1, где в стандарте обсуждаются объявления, которые не могут быть перегружены состояниями -

Объявления параметров, которые отличаются только при наличии или отсутствии const и / или volatile эквивалентны. Таким образом, спецификаторы const и volatile для каждого типа параметра игнорируются [...]

В этом способе игнорируются только спецификаторы const и volatile на внешнем уровне спецификации типа параметра; Спецификаторы типа const и volatile, скрытые в спецификации типа параметра, имеют большое значение и могут использоваться для различения объявлений перегруженных функций. [...]

при определении, какая функция объявляется, определяется или вызывается. В частности, для любого типа T «указатель на T», «указатель на const T» и «указатель на изменчивый T» считаются различными типами параметров, как и «ссылка на T», «ссылка на const T» и «ссылка на изменчивый T».

Следовательно,

void validateAttribute(Model &model, std::string &attribute) override;

не совпадает с

void validateAttribute(Model &model, const std::string &attribute);
  • Во-вторых, вы можете избегайте таких ошибок, если у вас есть C++11 или новее с использованием ключевого слова override в объявлении функции, как показано ниже.

с переопределением ключевое слово, этот код не позволит вам скомпилировать, если сигнатура функции в производном классе не совпадает с сигнатурой в базовом классе!

class RequiredValidator : public Validator
{
public:
    std::string m_name = "RequiredValidator";

    void validateAttribute(Model &model, std::string &attribute) override;
    ~RequiredValidator();
    std::string name() const;
};

РЕДАКТИРОВАТЬ: ps override требуется ключевое слово virtual. Следовательно, [1117 ]

virtual void validateAttribute(Model &model, std::string &attribute) override;
370
задан Jaap 25 September 2017 в 18:55
поделиться

6 ответов

Мне что кажется, если набор имеет режим, то его элементы могут быть отображены непосредственные с натуральными числами. Так, проблема нахождения режима уменьшает до создания такого отображения, находя режим отображенных значений, затем отображаясь назад на некоторые объекты в наборе. (Контакт с NA происходит в отображающейся фазе).

я имею histogram функция, которая воздействует на подобный принципал. (Специальные функции и операторы, используемые в коде, представленном здесь, должны быть определены в [1 112] Shapiro и/или neatOveRse. Части Shapiro и neatOveRse, дублированного здесь, так дублированы с разрешением; дублированные отрывки могут использоваться в соответствии с этим сайтом.) Псевдокод R для histogram

.histogram <- function (i)
        if (i %|% is.empty) integer() else
        vapply2(i %|% max %|% seqN, `==` %<=% i %O% sum)

histogram <- function(i) i %|% rmna %|% .histogram

(Специальные бинарные операторы выполняют передача по каналу , приправляющий карри , и состав ), я также имею maxloc функция, которая подобна which.max, но возвраты весь абсолютные максимумы вектора. Псевдокод R для maxloc

FUNloc <- function (FUN, x, na.rm=F)
        which(x == list(identity, rmna)[[na.rm %|% index.b]](x) %|% FUN)

maxloc <- FUNloc %<=% max

minloc <- FUNloc %<=% min # I'M THROWING IN minloc TO EXPLAIN WHY I MADE FUNloc

Тогда

imode <- histogram %O% maxloc

, и

x %|% map %|% imode %|% unmap

вычислит режим любого набора, обеспеченного соответствующим map - ping и unmap - функции ping определяются.

0
ответ дан 23 November 2019 в 00:05
поделиться

Добавление в raster::modal() как опция, хотя примечание, которое raster является значительным пакетом и не может стоить устанавливать, если Вы не делаете геопространственной работы.

исходный код мог быть вытащен https://github.com/rspatial/raster/blob/master/src/modal.cpp и https://github.com/rspatial/raster/blob/master/R/modal. R в персональный пакет R, для тех, кто особенно увлечен.

0
ответ дан 23 November 2019 в 00:05
поделиться

нашел это в списке рассылки r, надеюсь, это будет полезно. Это также то, о чем я думал в любом случае. Вы хотите вывести данные в таблицу(), отсортировать, а затем выбрать первое имя. Это хакерский способ, но он должен работать.

names(sort(-table(x)))[1]
57
ответ дан 23 November 2019 в 00:05
поделиться

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

mySamples <- c(19, 4, 5, 7, 29, 19, 29, 13, 25, 19)

library(modeest)
mlv(mySamples, method = "mfv")

Mode (most likely value): 19 
Bickel's modal skewness: -0.1 
Call: mlv.default(x = mySamples, method = "mfv")

Для получения дополнительной информации смотрите эту страницу

64
ответ дан 23 November 2019 в 00:05
поделиться

Вот еще один решение:

freq <- tapply(mySamples,mySamples,length)
#or freq <- table(mySamples)
as.numeric(names(freq)[which.max(freq)])
10
ответ дан 23 November 2019 в 00:05
поделиться

R имеет так много дополнительных пакетов, что некоторые из них вполне могут предоставить [статистический] режим числового списка / серии / вектора.

Однако в самой стандартной библиотеке R, похоже, нет такого встроенного метода! Один из способов обойти это - использовать некоторую конструкцию, подобную следующей (и превратить ее в функцию, если вы часто используете ...):

mySamples <- c(19, 4, 5, 7, 29, 19, 29, 13, 25, 19)
tabSmpl<-tabulate(mySamples)
SmplMode<-which(tabSmpl== max(tabSmpl))
if(sum(tabSmpl == max(tabSmpl))>1) SmplMode<-NA
> SmplMode
[1] 19

Для большего выборочного списка следует рассмотреть возможность использования временной переменной для max ( tabSmpl) (я не знаю, что R автоматически оптимизирует это)

Ссылка: см. «Как насчет медианы и режима?» в этом уроке KickStarting R
Кажется, это подтверждает, что (по крайней мере, на момент написания этого урока) в R нет функции режима (ну ... mode (), как вы выяснили, используется для утверждения типа переменных).

3
ответ дан 23 November 2019 в 00:05
поделиться
Другие вопросы по тегам:

Похожие вопросы: