Home > Net >  Remove a dot added by `unlist()` and replace it with "/" in a string vector in R
Remove a dot added by `unlist()` and replace it with "/" in a string vector in R

Time:11-03

I was wondering how to turn my input into my desired output?

As you can see, unlist() adds a . so only the . by unlist() must be removed not ANY other . and replaced with /.

in <- list(a.study = c(scale.1 = TRUE, outcome = FALSE), scale.1 = c(a.study = FALSE, outcome = FALSE))


out <- unlist(Filter(length,lapply(names(in),function(i) names(which(unlist(in[i]) == TRUE)))))

# [1] "a.study.scale.1" # Current output

desired_output <- c("a.study/scale.1")  # Desired output

CodePudding user response:

Changing the setup a bit:

unlist(Filter(
  length,
  lapply(
    names(input), 
    \(i) {
      k <- which(input[[i]])
      if (length(k)) paste0(i, '/', names(input[[i]])[k])
    }
  )
))

[1] "a.study/scale.1"

CodePudding user response:

Something like the following?

library(tidyverse)

inp <- list(a.study = c(scale.1 = TRUE, outcome = FALSE), scale.1 = c(a.study = FALSE, outcome = FALSE))

out <- unlist(Filter(length,lapply(names(inp),function(i) names(which(unlist(inp[i]) == TRUE)))))

out %>% 
  str_replace("(?<=y)\\.(?=s)", "\\/")

#> [1] "a.study/scale.1"
  • Related