Я пишу сценарий, который определяет интервал между векторами чисел.например, 0,3 попадает в первый интервал 0,5, 0,8, 1. Упрощенный пример кода ниже:
df <- data.frame(p1 = runif(10)/2, p2 = rep(-1,10), p3 = rep(1, 10));
df$p2 <- df$p1 + runif(10)/2;
r <- runif(10);
c(1,2,3)[apply(abs(outer(as.numeric(df[1,]), r, '-')),2, which.min)];
Это хорошо работает, когда каждое значение в r применяется к одному и тому же вектору - в этом случае как.numeric (DF [1,]).Однако теперь мне нужно применить каждое значение в r к соответствующей уникальной строке в наборе данных df.В данный момент я делаю это в цикле, который кажется неэффективным, но я не смог найти эффективную альтернативу циклической обработке каждой строки:
a <- array(dim=10);
for(x in 1:10){
a[x] <- c(1,2,3)[apply(abs(outer(as.numeric(df[x,]), r[x], '-')),2, which.min)];
}
Существует ли более эффективная альтернатива, чем цикл?
Спасибо, Джеймс