29

I have a vector of character type which has all the list of names.

So I'm looping through each name and peforming some actions. This loop is not based on the index/length (and I want to keep it this way).

However, if I want to access the index value in the loop how do I get it.

Ex:

names <- c("name1", "name2") for(name in names){ #do something print(name) #here how would I get the index number? like 1, 2 etc? } 
1
  • In the tidyverse world, check out imap. No time now for a full answer, if someone wants to write one up or link to an answer using imap, please go ahead. Commented Jun 8, 2023 at 21:24

2 Answers 2

40

You can do something like this, which is literally getting the i value.

names <- c("name1", "name2") i<-0 for(name in names){ i<-i+1 print(i) } 

Or change the loop to use a numeric index

names <- c("name1", "name2") for(i in 1:length(names)){ print(i) } 

Or use the which function.

names <- c("name1", "name2") for(name in names){ print(which(name == names)) } 
Sign up to request clarification or add additional context in comments.

2 Comments

Would the which way still be suitable if there are non unique entries in the list?
Did you try it? I think you will find it works, if I understand what you are asking.
17

For variety:

names <- c("name1", "name2") for(i in seq_along(names)){ print(i) } 

seq_along is a fast primitive, and IMO slightly sweeter syntactic sugar.

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.