2012-02-13 7 views
6

Quando scorrendo un vettore, è possibile utilizzare l'indice di un elemento insieme all'elemento?R: Usando le informazioni di posizione degli elementi quando loop attraverso un vettore.

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

Supponiamo mi serve l'indice della 'prima' "a" di a.vector. Non Si può usare

che (a.vector == "a")

Perché ci sono due 'a' s e sarebbero tornati due posizioni 1 e 4. Ho bisogno della indice specifico dell'elemento che il ciclo copre immediatamente.

ho bisogno per qualcosa di simile:

b.vector < -c ("il", "gatto", "inseguito", "a", "mouse")

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

Questo sembra simile alla funzione 'enumera' in python. Una soluzione sarebbe di grande aiuto. Grazie.

risposta

12

Come circa appena loop con il numero di indice?

for (i in seq_along(a.vector)){ 
    a.element <- a.vector[i] 
    b.element <- b.vector[i] 
    ... 
} 
1

Uso which.max invece di which. Sceglierà la posizione del primo TRUE da TRUE> FALSE.

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

È possibile che @James capito la richiesta meglio di me Hai davvero fatto una domanda diversa alla fine del testo di quanto hai chiesto nella riga dell'oggetto per cui si potrebbe wnat chiarire. Vorrei aggiungere che la nozione di passare la posizione di "i" in una forma nascosta insieme con il suo valore è piuttosto estraneo alla R. La gente spesso chiedere se R è "passaggio per valore" rispetto a "passare di riferimento". La risposta corretta non è né ... che "passa per promessa". Tuttavia, ciò è concettualmente molto più vicino a "passare per valore" rispetto a "passare per riferimento". for è una funzione e R esegue una copia degli argomenti che si passa dalla funzione chiamata nel suo corpo. Non ci sono informazioni sulla "localizzazione" che vengono portate avanti a meno che tali informazioni non siano ciò che si fa in effetti chiedergli di trasmettere.

+0

Mille grazie per le informazioni su "pass by". In realtà, sono le informazioni sulla posizione che volevo usare nel passaggio. È vero che la riga dell'oggetto e la domanda sono un po 'incoerenti. La riga dell'oggetto ha senso solo se è collegata al looping. È come puntare un dito a un elemento di un vettore e chiedergli l'indice. Ho usato la parola "ricorrenza" nel senso sbagliato che significava "occorrenze prima o dopo la posizione dell'elemento". Per la risposta, il primo VERO può anche essere ottenuto semplicemente usando quale (...) [1]. Spero che il nuovo sub. la linea è migliore Molte grazie. – jackson

Problemi correlati