Мы можем сделать длины равными, реплицируя второй столбец, а затем разделим на подмножество набора данных, у которого нет первого или второго столбца
df1[-(1:2)] <- df1[-(1:2)]/df1[,2][row(df1[-(1:2)])]
df1
# Name Col dKO1 dKO2 sdi1
#29 Mark 1769380098 0.8674967 0.9201740 0.8735108
#30 Anders 1444462500 1.2425947 1.2336649 1.2105541
#1278 Tom 1499146688 1.5293111 1.1068905 1.1640133
#1295 Vin 1276309375 0.6705163 0.5807531 1.2195172
#1296 Marcel 22279500 0.9836621 1.8511187 NaN
#1297 Tyta 3114023471 0.9813868 0.9098608 1.1405553
#1298 Gerta 2961012500 1.2097011 1.2412815 1.0496874
#1307 Moses 3978937424 0.9467125 0.9029171 0.9344295
#1642 Hank 1703925000 1.1991725 0.9310929 0.8100584
#1674 Rita 1838885550 1.1614969 1.0520367 1.2059076
#1754 Margary 1483386250 0.9990865 0.9891363 0.6922093
Не может полагать, что никто еще не предложил это:
(@myvar.phonelist || []).each do |phone|
...
, Если phonelist
nil
, эти each
, циклично выполнится на пустом массиве, выполняя нулевые времена блока.
ОДНАКО это все еще выдаст исключение, если phonelist
не будет счетное (например, массив).
Просто сделайте следующее:
Array(phonelist).each do |phone|
#deal with your phone
end
Массив (my_variable) обеспечит возврат массива, если my_variable равен nil.
Он не создает новый массив, если my_variable уже является массивом, поэтому его безопасно и легко использовать где угодно!
Просто убедитесь, что пустое значение phonelist
является значением []
вместо значения nil
.
В качестве альтернативы, значение nil
является фальси в Ruby, поэтому вы можете использовать ноль-наказание
if phonelist
phonelist.each do |phone|
...