Вычислите среднее значение по буквам, дающим 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)
Вы можете вернуться к RTTI, используя TypeInfo (T) = TypeInfo (string)
. Чтобы проверить, является ли что-то классом, вы можете использовать что-то вроде PTypeInfo (TypeInfo (T)) ^. Kind = tkClass
.
Тип PTypeInfo
и Элемент перечисления tkClass
определен в блоке TypInfo
.
Если кому-то интересно, как я реализовал свой «худший размер со специальной обработкой для струн»
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;
Для меня это под рукой. Спасибо всем, кто внес свой вклад!
в C #, вы можете сделать typeof (T)
, который позволит вам сделать что-то вроде
(T = String)
или
(T is class)
Я не видел ваш другой вопрос (вы не указали на него), но что вы на самом деле ищете ? В общем, выполнение чего-либо условного в отношении типа или Typecode с помощью ifs, как вы делаете, или переключателя, как правило, лучше всего преобразовывать в наличие интерфейса или абстрактной функции где-то, что настраивается контекстом.