#r #indexing
#r #индексирование
Вопрос:
У меня проблема с получением двух индексов в выходных данных, для которых у нас есть максимум. Давайте рассмотрим следующий код.
choose_coef<-function(vec){
t<-seq(from=1,to=2,by=0.5)
for (i in 1:length(t)){
for (j in 1:length(t)){
vec<-append(vec,i/2-j/2)
}
}
#which i,j gives max(vec)
}
И что я хочу получить на выходе: максимум для i = … и j = …. Однако я обнаружил, что это не так просто сделать. Легко извлечь один индекс, для которого у нас есть максимум, но проблема возникает, когда у нас есть два индекса. Есть ли какое-либо простое решение, как мы можем это сделать?
Ответ №1:
Непонятно, почему вы передаете вектор этой функции, а затем добавляете материал в ее конец. Я предполагаю, что вы хотите vec
быть пустым.
Простым решением будет такая модификация:
choose_coef <- function() {
t <- seq(from = 1, to = 2, by = 0.5)
vec <- numeric()
for (i in 1:length(t)){
for (j in 1:length(t)){
vec <- append(vec, setNames(i/2 - j/2, paste0("i=", i, ";j=", j)))
}
}
names(which.max(vec))
}
Который выдает:
choose_coef()
#> [1] "i=3;j=1"
В качестве альтернативы, следующая функция является самоописывающейся, поскольку при запуске она выдает объяснение того, как она работает:
choose_coef <- function() {
t <- seq(from = 1, to = 2, by = 0.5)
vec <- numeric()
for (i in 1:length(t)){
for (j in 1:length(t)){
vec <- append(vec, i/2 - j/2)
}
}
cat("The maximum value was", max(vec), "which occurred at position",
which.max(vec), "nSince there were", length(t),
"iterations of j for each of the", length(t),
"iterations of i,nwe know that the maximum occurred on:ni =",
(which.max(vec) - 1) %/% length(t) 1, "and j =",
(which.max(vec) - 1) %% length(t) 1)
}
Итак, мы просто делаем:
choose_coef()
#> The maximum value was 1 which occurred at position 7
#> Since there were 3 iterations of j for each of the 3 iterations of i,
#> we know that the maximum occurred on:
#> i = 3 and j = 1