R: Использование информации о положении элементов при цикле по вектору. - PullRequest
6 голосов
/ 13 февраля 2012

При циклическом прохождении вектора возможно ли использовать индекс элемента вместе с элементом?

a.vector <-c ("a", "b", "c", "a", "d") </p>

Давайте предположим, что мне нужен индекс первого 'a' a.vector. Нельзя использовать

которое (a.vector == "a")

Поскольку есть два «а», и он вернул бы две позиции 1 и 4. Мне нужен конкретный индекс элемента, который цикл мгновенно охватывает.

Мне нужно что-то вроде этого:

b.vector <-c ("the", "cat", "chased", "a", "mouse") </p>

for (i in a.vector) {
    element<-b.vector[INDEX.OF(a.vector)])
-------some process using both 'element' and "a"-------}

Это похоже на функцию enumerate в python. Решение очень поможет. Благодаря.

Ответы [ 2 ]

12 голосов
/ 13 февраля 2012

Как насчет того, чтобы просто зацикливаться с порядковым номером?

for (i in seq_along(a.vector)){
   a.element <- a.vector[i]
   b.element <- b.vector[i]
   ...
}
1 голос
/ 13 февраля 2012

Используйте which.max вместо which. Он выберет позицию первого ИСТИНА, так как ИСТИНА> ЛОЖЬ.

 which.max(a.vector=="a")
#[1] 1

Возможно, @James понял ваш запрос лучше, чем я. Вы действительно задали другой вопрос в конце своего текста, чем тот, который вы задали в строке темы, так что вы не могли бы уточнить. Я добавлю, что понятие передачи местоположения «i» в скрытой форме вместе с его значением довольно чуждо R. Люди часто спрашивают, является ли R «передачей по значению» по сравнению с «передачей по ссылке». Правильный ответ ни тот, ни другой ... что это "мимоходом обещание". Однако концептуально это намного ближе к «передаче по значению», чем к «передаче по ссылке». for - это функция, и R создает копию аргументов, передаваемых из вызова функции, в ее тело. Информация о местоположении отсутствует, если только эта информация не является тем, что вы на самом деле просили ее передать.

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