Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Error in 'vec_slice()' #202

Open
clemencerapicault opened this issue Jun 20, 2024 · 0 comments
Open

Error in 'vec_slice()' #202

clemencerapicault opened this issue Jun 20, 2024 · 0 comments
Labels
help-request User requested help with the package

Comments

@clemencerapicault
Copy link

Objective
Hello,
I have used a code to generate ComplexUpset graphics that works on my PC. I also work in a secure bubble (CAS-D), I tried to import and reproduce the same analysis in the bubble but I get an error even though the format of my data is exactly the same.
I've checked the package updates but it still doesn't work and I don't understand the error, as the format of my data is the same as on my usual PC.

This is the error I get:
Error in 'vec_slice()' :
! Can't subset elements with 'i'.
Subscript 'i' must be a simple vector, not a matrix.
Run 'rlang::last_trace()' to see where the error occurred.

Thank you in advance for your help.

Code

set_size = function(w, h, factor=1.5) {
  s = 1 * factor
  options(
    repr.plot.width=w * s,
    repr.plot.height=h * s,
    repr.plot.res=100 / factor,
    jupyter.plot_mimetypes='image/png',
    jupyter.plot_scale=1
  )
}

set_size(8, 3)
size <- get_size_mode('exclusive_intersection')
expos <- c("BorgVenn",
           "C_AQ_EXPOACT_Trrepet_01",
           "C_AQ_EXPOACT_TrOutVibr_01",
           "C_AQ_EXPOACT_TrTordPoignet_01",
           "C_AQ_EXPOACT_TrPincer_01")

BDD_finale_CC_UpsetBiomeca_hommes[expos] <- BDD_finale_CC_UpsetBiomeca_hommes[expos] == 1 | BDD_finale_CC_UpsetBiomeca_hommes[expos] == "Oui"

# Copiez le dataframe pour éviter de modifier l'original
BDD_finale_CC_UpsetBiomeca_hommes_mod <- BDD_finale_CC_UpsetBiomeca_hommes

# Renommez les colonnes pour l'affichage
colnames(BDD_finale_CC_UpsetBiomeca_hommes_mod)[colnames(BDD_finale_CC_UpsetBiomeca_hommes_mod) %in% expos] <- c(
  "Repetitive hand movements",
  "Hand-transmitted vibrations", 
  "Awkward wrist postures", 
  "Repetitive pinching",
  "High physical perceived exertion (RPE ≥12)")

expos <- c("High physical perceived exertion (RPE ≥12)", 
           "Repetitive hand movements", 
           "Hand-transmitted vibrations", 
           "Awkward wrist postures", 
           "Repetitive pinching")

# Fonction pour calculer les tailles et les pourcentages des intersections
calculate_intersection_sizes <- function(data, sets) {
  upset_data <- data %>%
    dplyr::select(all_of(sets)) %>%
    mutate(across(everything(), as.logical)) %>%
    group_by(across(everything())) %>%
    summarise(size = n(), .groups = 'drop') %>%
    ungroup()
  
  total_size <- sum(upset_data$size)
  upset_data <- upset_data %>%
    mutate(percentage = size / total_size * 100) %>%
    mutate(text_label = paste0(round(percentage, 1), "%\n(", size, ")"))
  
  return(upset_data)
}

# Calculez les tailles et les pourcentages des intersections
intersection_sizes <- calculate_intersection_sizes(BDD_finale_CC_UpsetBiomeca_hommes_mod, expos)

# Vérifiez que les pourcentages sont calculés correctement
print(intersection_sizes)

# Fonction pour générer les labels d'annotations
generate_labels <- function(size, data) {
  match_indices <- match(size, data$size)
  return(data$text_label[match_indices])
}

# Graphique avec ComplexUpset
upset_plot <- ComplexUpset::upset(
  BDD_finale_CC_UpsetBiomeca_hommes_mod, 
  expos, 
  name = 'Exposure', 
  width_ratio = 0.1, 
  min_size = 30,
  min_degree = 1,
  base_annotations = list(
    'Intersection size' = intersection_size(
      text_mapping = aes(
        label = generate_labels(!!size, intersection_sizes),
        colour = ifelse(!!size > 300, 'on_bar', 'on_background'),
        y = ifelse(!!size > 300, !!size - 300, !!size)
      )
    )
  ),
  set_sizes = (
    upset_set_size()
    + geom_text(aes(label = ..count..), hjust = 0, stat = 'count', color = 'white')
    + theme(axis.text.x = element_text(angle = 90),
            axis.ticks.x = element_line())
  )
)

# Affichez le graphique
print(upset_plot)

Context (required)

ComplexUpset version: 1.3.3

R version details
$platform
[1] "x86_64-w64-mingw32"

$arch
[1] "x86_64"

$os
[1] "mingw32"

$crt
[1] "ucrt"

$system
[1] "x86_64, mingw32"

$status
[1] ""

$major
[1] "4"

$minor
[1] "4.0"

$year
[1] "2024"

$month
[1] "04"

$day
[1] "24"

$`svn rev`
[1] "86474"

$language
[1] "R"

$version.string
[1] "R version 4.4.0 (2024-04-24 ucrt)"

$nickname
[1] "Puppy Cup"
R session information
R version 4.4.0 (2024-04-24 ucrt)
Platform: x86_64-w64-mingw32/x64
Running under: Windows Server 2019 x64 (build 17763)

Matrix products: default


locale:
[1] LC_COLLATE=French_France.1252  LC_CTYPE=French_France.1252    LC_MONETARY=French_France.1252
[4] LC_NUMERIC=C                   LC_TIME=French_France.1252   

time zone: Europe/Paris
tzcode source: internal
@clemencerapicault clemencerapicault added the help-request User requested help with the package label Jun 20, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
help-request User requested help with the package
Projects
None yet
Development

No branches or pull requests

1 participant