2012-02-13 16 views
6

Al recorrer un vector, ¿es posible usar el índice de un elemento junto con el elemento?R: Usar la información de posición de los elementos cuando se realiza un bucle a través de un vector.

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

Supongamos que necesito el índice de la "primera "a" de a.vector. No se puede utilizar

cuales (a.vector == "a")

porque hay dos 'a' s y se volverían dos posiciones 1 y 4. Necesito el índice específico del elemento que el ciclo está cubriendo al instante.

lo necesito para algo como esto:

b.vector < -c ("el", "gato", "perseguido", "a", "ratón")

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

Esto parece similar a la función 'enumerar' en python. Una solución ayudaría mucho. Gracias.

Respuesta

12

¿Qué tal simplemente buclear con el número de índice?

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

Use which.max en lugar de which. Seleccionará la posición del primer VERDADERO desde VERDADERO> FALSO.

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

Es posible que @ James entiende su petición mejor que yo Realmente hace una pregunta diferente al final de su texto que usted pidió en la línea de asunto por lo que podría wnat aclarar. Añadiré que la noción de pasar la ubicación de "i" en forma oculta junto con su valor es bastante extraña a R. La gente a menudo pregunta si R es "pasar por valor" versus "pasar por referencia". La respuesta correcta tampoco es ... que es "pasar por alto". Sin embargo, esto es conceptualmente mucho más cerca de "pasar de valor" de lo que sería "pasar por referencia". for es una función y R hace una copia de los argumentos que pasan de la invocación de función a su cuerpo. No hay información de "ubicación" que se lleve a cabo a menos que dicha información sea lo que usted hace, de hecho, le pidió que aprobara.

+0

Muchas gracias por la información sobre 'pasar por'. En realidad, es la información de ubicación que quería usar al pasar. Es cierto que el tema y la pregunta son un poco incoherentes. La línea de asunto tiene sentido solo si está conectada a un bucle. Es como señalar con un dedo a un elemento de un vector y preguntar su índice. Utilicé la palabra 'repetición' en el sentido equivocado de que significaba 'ocurrencias antes o después de la posición del elemento'. Para la respuesta, el primer VERDADERO también puede obtenerse simplemente mediante el uso de (...) [1]. Espero que el nuevo submarino. la linea es mejor Muchas gracias. – jackson

Cuestiones relacionadas