Как мне максимизировать вектор - PullRequest
0 голосов
/ 10 февраля 2019

Я бы хотел максимизировать числа в векторе и получить результаты в виде нового вектора

Примерно так:

w <- 0:10
maximizer <- function(w){
  max(10, w + 5)
}

Я ожидаю получить вектор (10,10, 10,10,10,10,11,12,13,14,15), но все, что я получаю, это 15. Я знаю странные способы исправить это, но я уверен, что должен быть более легкий путь ...

Ответы [ 2 ]

0 голосов
/ 10 февраля 2019

вы можете использовать for-loop с оператором ifelse, хотя и не так элегантно, как в опубликованном решении:

for(i in seq_along(w)){
  w[[i]] <- ifelse(w[[i]]+5 < 10, 10, w[[i]] + 5)
}


[1] 10 10 10 10 10 10 11 12 13 14 15
0 голосов
/ 10 февраля 2019

Вместо max следует использовать pmax:

maximizer <- function(w) pmax(10, w + 5)
maximizer(0:10)
# [1] 10 10 10 10 10 10 11 12 13 14 15

, поскольку

pmax() и pmin() принимают один или несколько векторов в качестве аргументов, перезапускаютони имеют общую длину и возвращают один вектор, дающий «1011 * параллельные » максимумы (или минимумы) векторов аргументов.

, тогда как

max и min возвращают максимум или минимум всех значений, присутствующих в их аргументах

...