Qirohchan
Qirohchan

Reputation: 1137

How to code this if else clause in R?

I have a function that outputs a list containing strings. Now, I want to check if this list contain strings which are all 0's or if there is at least one string which doesn't contain all 0's (can be more). I have a large dataset. I am going to execute my function on each of the rows of the dataset. Now,

Basically,

for each row of the dataset
    mylst <- func(row[i])
    if (mylst(contains strings containing all 0's) 
        process the next row of the dataset
    else 
        execute some other code

Now, I can code the if-else clause but I am not able to code the part where I have to check the list for all 0's. How can I do this in R?

Thanks!

Upvotes: 1

Views: 146

Answers (2)

Marat Talipov
Marat Talipov

Reputation: 13304

I'd like to suggest solution that avoids use of explicit for-loop. For a given data set df, one can find a logical vector that indicates the rows with all zeroes:

all.zeros <- apply(df,1,function(s) all(grepl('^0+$',s))) # grepl() was taken from the Sven's solution

With this logical vector, it is easy to subset df to remove all-zero rows:

df[!all.zeros,]

and use it for any subsequent transformations.

'Toy' dataset

df <- data.frame(V1=c('00','01','00'),V2=c('000','010','020'))

UPDATE

If you'd like to apply the function to each row first and then analyze the resulting strings, you should slightly modify the all.zeros expression:

all.zeros <- apply(df,1,function(s) all(grepl('^0+$',func(s))))

Upvotes: 1

Sven Hohenstein
Sven Hohenstein

Reputation: 81693

You can use this for loop:

for (i in seq(nrow(dat))) {
    if( !any(grepl("^0+$", dat[i, ])) )
        execute some other code
}

where dat is the name of your data frame.

Here, the regex "^0+$" matches a string that consists of 0s only.

Upvotes: 2

Related Questions