Ненормальные записи

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

Сначала создайте список всех доступных конструкторов .

public EffectOptions ( params object [ ] options )
public EffectOptions ( IEnumerable options ) 
public EffectOptions ( string name )
public EffectOptions ( object owner ) 
public EffectOptions ( int count ) 
public EffectOptions ( Point point )

Затем устраните все неприменимые конструкторы . Применимый конструктор - это тот, где каждый формальный параметр имеет соответствующий аргумент, а аргумент неявно конвертируется в формальный тип параметра. Предполагая, что Точка является типом значения, мы исключаем версии «int» и «Point». Это оставляет

public EffectOptions ( params object[] options )
public EffectOptions ( IEnumerable options ) 
public EffectOptions ( string name )
public EffectOptions ( object owner ) 

. Теперь мы должны рассмотреть, применим ли тот, у кого есть «params» в его расширенной расширенной или нерасширенной форме. В этом случае это применимо в обеих формах. Когда это произойдет, мы отбрасываем расширенную форму . Таким образом, листья

public EffectOptions ( object[] options )
public EffectOptions ( IEnumerable options ) 
public EffectOptions ( string name )
public EffectOptions ( object owner ) 

Теперь мы должны определить наилучший применимых кандидатов. Правила бестселлера сложны, но короткая версия - более конкретная, чем менее конкретная. Жираф более специфичен, чем млекопитающее, млекопитающее более специфично, чем животное, животное более конкретное, чем объект.

Версия «объект» менее конкретна, чем все из них, поэтому ее можно устранить. Версия IEnumerable менее специфична, чем версия object[] (вы видите, почему?), Поэтому ее можно также устранить. Это оставляет

public EffectOptions ( object[] options )
public EffectOptions ( string name )

И теперь мы застреваем. объект [] не более или менее специфичен, чем строка. Поэтому это дает ошибку неоднозначности.

Это всего лишь краткий эскиз; реальный алгоритм tiebreaking намного сложнее. Но это основы.

-2
задан Gabriel 18 March 2019 в 17:09
поделиться

2 ответа

Вы ищете режим. R не имеет встроенной функции для режима, но вы можете создать функцию для этого:

library(data.table)
setDT(df)

getmode <- function(v) {
  uniqv <- unique(v)
  uniqv[which.max(tabulate(match(v, uniqv)))]
}

df[,characteristics1:=getmode(characteristics1), by=Person]

   Person characteristics1
1:      A                1
2:      A                1
3:      A                1
4:      A                1
5:      A                1
6:      A                1
0
ответ дан Pierre Lapointe 18 March 2019 в 17:09
поделиться

Не знаю, насколько правильным является ваше мышление, но вы можете найти наиболее повторяющееся значение и обновить столбец, основываясь на этом:

df$characteristics1=names(which.max(table(df$characteristics1)))

Оберните часть справа от = с as.numeric(), если вы работаете только с числами.

0
ответ дан boski 18 March 2019 в 17:09
поделиться
Другие вопросы по тегам:

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