Вы можете просто сделать:
data(mtcars) #get some preinstalled data
model <- lm(mpg ~ ., data = mtcars) #fit the model
summary(model) #get the summary
Это делает линейную регрессию mpg
по отношению ко всем другим переменным. Дальнейшая обработка не требуется.
После наблюдения сайта Assaf предположил, что мне удалось найти немного отличающееся решение, что я получил работу для Int32.
Вот код для кого-либо еще:
internal static UInt32 Count(this Skills skills)
{
UInt32 v = (UInt32)skills;
v = v - ((v >> 1) & 0x55555555); // reuse input as temporary
v = (v & 0x33333333) + ((v >> 2) & 0x33333333); // temp
UInt32 c = ((v + (v >> 4) & 0xF0F0F0F) * 0x1010101) >> 24; // count
return c;
}
Количество эквивалентно подсчету, сколько битов установлено на 1 в целочисленном значении перечисления.
Существуют очень быстрые способы сделать это в C/C++, который можно адаптировать к C#:
например.
int bitcount(unsigned int n) {
/* works for 32-bit numbers only */
/* fix last line for 64-bit numbers */
register unsigned int tmp;
tmp = n - ((n >> 1) & 033333333333)
- ((n >> 2) & 011111111111);
return ((tmp + (tmp >> 3)) & 030707070707) % 63;
}
Взятый отсюда.
Править
Если ссылка является битой. Найденный другим, который, вероятно, содержит то же содержание.
<FlagsAttribute()> _
Public Enum Skills As Byte
None = 0
Skill1 = 1
Skill2 = 2
Skill3 = 4
Skill4 = 8
Skill5 = 16
Skill6 = 32
Skill7 = 64
Skill8 = 128
End Enum
Dim x As Byte = Skills.Skill4 Or Skills.Skill8 Or Skills.Skill6
Dim count As Integer
If x = Skills.None Then count = 0 Else _
count = CType(x, Skills).ToString().Split(New Char() {","c}, StringSplitOptions.RemoveEmptyEntries).Count
зависит от определения "лучше".
проверка на Навыки. Ни один не требуется, потому что, если никакие биты не идут, строка () возвращает Навыки. Ни один, что приводит к количеству 1. это работало бы то же на целое число, долго, и их неподписанные родственники.
единственная причина использовать этот метод состоит в том, если флаги не непрерывны и если флаги будут периодически добавляться.
<FlagsAttribute()> _
Public Enum Skills As Integer
Skill1 = CInt(2 ^ 0) 'bit 0
Skill2 = CInt(2 ^ 1)
Skill3 = CInt(2 ^ 2)
Skill4 = CInt(2 ^ 3)
Skill5 = CInt(2 ^ 4)
Skill6 = CInt(2 ^ 5)
Skill7 = CInt(2 ^ 6)
Skill8 = CInt(2 ^ 7)
Skillx = CInt(2 ^ 10) 'bit 10, some bits were skipped
End Enum
Dim mySkills As Integer = Skills.Skillx Or Skills.Skill4 Or Skills.Skill8 Or Skills.Skill6
Dim count As Integer 'count of bits on
count = CType(mySkills, Skills).ToString().Split(New Char() {","c}, _
StringSplitOptions.RemoveEmptyEntries).Count
если "лучше" означает быстрее, что это не ;) это.
Перечисление. GetNames () возвратит массив всех имен в перечислении, добавить.Length для нахождения количества.
Следующий код даст вам количество битов, установленных для заданного числа любого типа, размер которого варьируется от байта до длинного.
public static int GetSetBitCount(long lValue)
{
int iCount = 0;
//Loop the value while there are still bits
while (lValue != 0)
{
//Remove the end bit
lValue = lValue & (lValue - 1);
//Increment the count
iCount++;
}
//Return the count
return iCount;
}
Этот код очень эффективен, поскольку он только повторяется один раз для каждого бита, а не один раз для каждого возможного бита, как в других примерах.