Условное поведение на основе конкретного типа для универсального класса

Вычислите среднее значение по буквам, дающим ag, переведите это в конец DF, дайте DF2 и сортируйте.

ag <- aggregate(value ~ letter, DF, mean)
DF2 <- rbind(DF, ag)

o <- order(DF2$letter, rownames(DF2))
DF2[o, ]

дает:

  letter value
1      A     1
2      A     2
3      A     3
7      A     2
4      B     1
5      B     2
6      B     3
8      B     2

Примечание

Ввод DF в воспроизводимой форме:

DF <- data.frame(letter = rep(c("A", "B"), each = 3), value = 1:3)
15
задан Community 23 May 2017 в 11:46
поделиться

3 ответа

Вы можете вернуться к RTTI, используя TypeInfo (T) = TypeInfo (string) . Чтобы проверить, является ли что-то классом, вы можете использовать что-то вроде PTypeInfo (TypeInfo (T)) ^. Kind = tkClass .

Тип PTypeInfo и Элемент перечисления tkClass определен в блоке TypInfo .

22
ответ дан 1 December 2019 в 02:37
поделиться

Если кому-то интересно, как я реализовал свой «худший размер со специальной обработкой для струн»

class function RTTIUtils.GetDeepSize <T> (Variable : T) : Integer;
var
  StringLength          : Integer;
  Ptr                   : PInteger;
begin
if (TypeInfo (T) = TypeInfo (String)) then
  begin
  Ptr := @Variable;
  Ptr := PInteger (Ptr^);
  Dec (Ptr);
  StringLength := Ptr^;
  Result := StringLength * SizeOf (Char) + 12;
  end
else
  Result := 0;
end;

Для меня это под рукой. Спасибо всем, кто внес свой вклад!

3
ответ дан 1 December 2019 в 02:37
поделиться

в C #, вы можете сделать typeof (T) , который позволит вам сделать что-то вроде

(T = String)

или

(T is class)

Я не видел ваш другой вопрос (вы не указали на него), но что вы на самом деле ищете ? В общем, выполнение чего-либо условного в отношении типа или Typecode с помощью ifs, как вы делаете, или переключателя, как правило, лучше всего преобразовывать в наличие интерфейса или абстрактной функции где-то, что настраивается контекстом.

1
ответ дан 1 December 2019 в 02:37
поделиться
Другие вопросы по тегам:

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