#
Goal

count the number of plus signs in the following model (character string) using base R

```
y ~ z + x1 + x2 + x3 + x4 + x5 + x6 + x8 + x9 + x10 + x11
```

#
Source code

```
model <- as.formula("y~z+x1+x2+x3+x4+x5+x6+x8+x9+x10+x11")
model
me <- gsub("y ~ ", "", model)
me
me2 <- length(unlist(gregexpr('+', me)))
me2
```

#
Output

```
y ~ z + x1 + x2 + x3 + x4 + x5 + x6 + x8 + x9 + x10 + x11
[1] "~"
[2] "y"
[3] "z + x1 + x2 + x3 + x4 + x5 + x6 + x8 + x9 + x10 + x11"
[1] 55 why does this not equal 11?
```

Because it does not equal 10

```
model <- as.formula("y~z+x1+x2+x3+x4+x5+x6+x8+x9+x10+x11")
me <- gsub("y ~ ", "", model)
length(grep(" ",gsub("[a-z~0-9]"," ",unlist(strsplit(me," "))),invert = TRUE, value = TRUE))
#> [1] 10
```

^{Created on 2023-03-13 with reprex v2.0.2}

I would do it like so :

```
library(stringr) # or library(tidyverse)
(model <- as.formula("y~z+x1+x2+x3+x4+x5+x6+x8+x9+x10+x11"))
(me <- toString(model))
(me2 <- str_count(me,fixed("+")))
```

Thanks. I forgot x7 was not in this model. This is why I need this hard coded.

I like the simplicity of stringr code. Thanks.

system
Closed
8
This topic was automatically closed 7 days after the last reply. New replies are no longer allowed.

If you have a query related to it or one of the replies, start a new topic and refer back with a link.