Усечение значений вектора на основе другого вектора - PullRequest
0 голосов
/ 08 ноября 2010

Вот общий алгоритм, который я хочу реализовать в R:

if (x[i]>y[i]) x[i] = y[i]

x и y, конечно, векторы. Эта проблема выглядит как петля является решением.

Ответы [ 3 ]

8 голосов
/ 08 ноября 2010

Пара возможностей.Сначала с помощью функции ifelse (поскольку конструкция if () {} else {} не работает с векторами):

x <- ifelse( x > y, y, x)

Или с логическим индексированием:

x[ x>y ] <- y[ x>y ]

Оба этиПредположим, что x и y имеют одинаковую длину и неявно сравнивают и присваивают поэлементно, поэтому нет необходимости в индексе

2 голосов
/ 08 ноября 2010

Хорошо, DWin уже показал вам, почему вам абсолютно не нужен цикл в R. Но, очевидно, вы не хотите делать то, что просили, иначе ваш комментарий не будет иметь никакого смысла.

Если вы хотите выбрать, какие из них вы хотите изменить, вы просто добавляете дополнительный логический вектор к решению DWin, например:

x <- 1:10
y <- 10:1

# say I want to change every second index
id <- seq.int(length(x))%%2

ifelse(x>y & id,y,x)

Вы можете делать то, что хотите, так какесли id:

  • , то есть x и y
  • содержит 1 / TRUE для может измениться и 0 / FALSE для не может измениться
1 голос
/ 26 августа 2015

Самый короткий ответ, безусловно,

x <- pmax(x,y)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...