Для точных правил см. спецификацию разрешения перегрузки . Но вкратце, это происходит следующим образом.
Сначала создайте список всех доступных конструкторов .
public EffectOptions ( params object [ ] options )
public EffectOptions ( IEnumerable
Затем устраните все неприменимые конструкторы . Применимый конструктор - это тот, где каждый формальный параметр имеет соответствующий аргумент, а аргумент неявно конвертируется в формальный тип параметра. Предполагая, что Точка является типом значения, мы исключаем версии «int» и «Point». Это оставляет
public EffectOptions ( params object[] options )
public EffectOptions ( IEnumerable
. Теперь мы должны рассмотреть, применим ли тот, у кого есть «params» в его расширенной расширенной или нерасширенной форме. В этом случае это применимо в обеих формах. Когда это произойдет, мы отбрасываем расширенную форму . Таким образом, листья
public EffectOptions ( object[] options )
public EffectOptions ( IEnumerable
Теперь мы должны определить наилучший применимых кандидатов. Правила бестселлера сложны, но короткая версия - более конкретная, чем менее конкретная. Жираф более специфичен, чем млекопитающее, млекопитающее более специфично, чем животное, животное более конкретное, чем объект.
Версия «объект» менее конкретна, чем все из них, поэтому ее можно устранить. Версия IEnumerable
менее специфична, чем версия object[]
(вы видите, почему?), Поэтому ее можно также устранить. Это оставляет
public EffectOptions ( object[] options )
public EffectOptions ( string name )
И теперь мы застреваем. объект [] не более или менее специфичен, чем строка. Поэтому это дает ошибку неоднозначности.
Это всего лишь краткий эскиз; реальный алгоритм tiebreaking намного сложнее. Но это основы.
Вы ищете режим. 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
Не знаю, насколько правильным является ваше мышление, но вы можете найти наиболее повторяющееся значение и обновить столбец, основываясь на этом:
df$characteristics1=names(which.max(table(df$characteristics1)))
Оберните часть справа от =
с as.numeric()
, если вы работаете только с числами.