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

robustness function, random error #25

Open
mmpust opened this issue Mar 14, 2021 · 15 comments
Open

robustness function, random error #25

mmpust opened this issue Mar 14, 2021 · 15 comments
Labels

Comments

@mmpust
Copy link

mmpust commented Mar 14, 2021

Thank you for providing this nice R package. I want to calculate my network (igraph) robustness and vulnerability. When I run the robustness function with degree and betweeness centrality measures, it does run fine. However, for the random argument, I always get the following error message:

Error in { : task 3 failed - "Invalid vertex names"

Any ideas on how to solve the problem? Why is it just a problem with "random" and not the other two arguments? Thank you!

@cwatson
Copy link
Owner

cwatson commented Mar 14, 2021

When random is chosen, it uses the vertex names to remove vertices one-by-one. Does your graph have vertex names?

@martaesse
Copy link

martaesse commented Mar 19, 2021

Hello everyone!
I am also trying to calculate my network robustness with the following command:

robustness(net_joint, type=c("vertex"), measure=c("random"))

but the error is always:

Error in { : task 3 failed - "Invalid vertex names"

as that reported by @mmpust !!
I'm not really an R expert and maybe I can't import the vertex names correctly. Maybe can someone help me?

library("igraph")
net_joint <- graph_from_data_frame(d=links, vertices=nodes, directed=F)

head(nodes)
id name tipologia
1 nodo1 Highway
2 nodo2 Highway
3 nodo3 Highway
4 nodo4 Highway
5 nodo5 Highway
6 nodo6 Highway

net_joint

IGRAPH 41f50f0 UNW- 108 160 --

  • attr: name (v/c), tipologia (v/c), weight (e/n), type (e/c)
  • edges from 41f50f0 (vertex names):
    [1] nodo1 --nodo2 nodo3 --nodo6 nodo4 --nodo7 nodo4 --nodo9 nodo4 --nodo5
    [6] nodo5 --nodo9 nodo5 --nodo78 nodo6 --nodo64 nodo3 --nodo64 nodo5 --nodo6
    [11] nodo8 --nodo9 nodo2 --nodo10 nodo7 --nodo10 nodo1 --nodo11 nodo3 --nodo11
    [16] nodo14--nodo19 nodo12--nodo17 nodo12--nodo95 nodo12--nodo104 nodo16--nodo61
    [21] nodo16--nodo97 nodo17--nodo99 nodo19--nodo100 nodo7 --nodo20 nodo20--nodo27
    [26] nodo22--nodo98 nodo22--nodo23 nodo24--nodo44 nodo25--nodo63 nodo26--nodo44
    [31] nodo10--nodo27 nodo23--nodo29 nodo29--nodo98 nodo30--nodo31 nodo32--nodo33
    [36] nodo32--nodo99 nodo14--nodo34 nodo36--nodo37 nodo37--nodo68 nodo35--nodo38
  • ... omitted several edges

V(net_joint)$name
[1] "nodo1" "nodo2" "nodo3" "nodo4" "nodo5" "nodo6" "nodo7" "nodo8" "nodo9"
[10] "nodo10" "nodo11" "nodo12" "nodo13" "nodo14" "nodo15" "nodo16" "nodo17" "nodo18"
[19] "nodo19" "nodo20" "nodo21" "nodo22" "nodo23" "nodo24" "nodo25" "nodo26" "nodo27"
[28] "nodo28" "nodo29" "nodo30" "nodo31" "nodo32" "nodo33" "nodo34" "nodo35" "nodo36"
[37] "nodo37" "nodo38" "nodo39" "nodo40" "nodo41" "nodo42" "nodo43" "nodo44" "nodo45"
[46] "nodo46" "nodo47" "nodo48" "nodo49" "nodo50" "nodo51" "nodo52" "nodo53" "nodo54"
[55] "nodo55" "nodo56" "nodo57" "nodo58" "nodo59" "nodo60" "nodo61" "nodo62" "nodo63"
[64] "nodo64" "nodo65" "nodo66" "nodo67" "nodo68" "nodo69" "nodo70" "nodo71" "nodo72"
[73] "nodo73" "nodo74" "nodo75" "nodo76" "nodo77" "nodo78" "nodo79" "nodo80" "nodo81"
[82] "nodo82" "nodo83" "nodo84" "nodo85" "nodo86" "nodo87" "nodo88" "nodo89" "nodo90"
[91] "nodo91" "nodo92" "nodo93" "nodo94" "nodo95" "nodo96" "nodo97" "nodo98" "nodo99"
[100] "nodo100" "nodo101" "nodo102" "nodo103" "nodo104" "nodo105" "nodo106" "nodo107" "nodo108"

robustness(net_joint, type=c("vertex"), measure=c("random"))
Error in { : task 3 failed - "Invalid vertex names"

I really thank anyone could help me!!

@mmpust
Copy link
Author

mmpust commented Mar 22, 2021

I was not able to solve the problem, even though the vertexes in my network have unique names.

@cwatson
Copy link
Owner

cwatson commented Mar 24, 2021

If one or both of you could send me (via emai if you prefer) the graph that is causing errors (as a .rds file) I can take a look and should be able to make a bugfix update soon (maybe this weekend).

@martaesse
Copy link

Thank you very much for your answer @cwatson. Here you find attached my graph.
As you'll see it is a very very simple graph and I think the problem is related to my lack of experience with R (and with graphs in general). You will find my problem a bit silly, so thank you for your time.

graph.zip

@cwatson
Copy link
Owner

cwatson commented Mar 27, 2021

@martaesse
I loaded your graph and was able to run, without error:
robustness(g, type='vertex', measure='random')

I am not sure why you would see an error. Your post shows that your graph has names, but the graph you sent me is unnamed (they are just numbers); however, when I assign the same names I am still able to run the function.

Are you running on Windows, by chance? Please provide some system information, including the version of brainGraph you are using.

@martaesse
Copy link

martaesse commented Mar 27, 2021

Thank you @cwatson. I'm sorry I sent you a graph with different names from one in the post: this is because I did a lot of tests changing the names of the nodes, hoping that the error was in the type of name assigned, i.e. whether it was a number or a string. While the robustness command with the "degree" and "betweenness" option always works, the "random" one never does. (Robustness also works by removing edges randomly). Anyway, yes I use windows (Windows 10 Pro, version 20H2. 64-bit Operating System). Brain Graph is 3.0.0 version and R version 4.0.4. I really thank you for the help you are giving me.

@cwatson
Copy link
Owner

cwatson commented Mar 27, 2021

I see. My first recommendation would be to use a Linux system, as I have seen more foreach-related issues on Windows systems. I don't do development on Windows so it would be difficult for me to update the function and test it to make sure it works, as it works just fine on my computer. But I will try to update it so it doesn't use vertex names either way.

Out of curiosity, do you also see an error when you do robustness(g, type='edge', measure='random')?

A quick fix you could try would be to assign vertex names using one of the atlases in brainGraph. For example, in your specific case, you could do something like
V(g)$name <- aal116$name[1:108]
but of course this isn't a permanent solution.

@martaesse
Copy link

I really thank you.
I tried your method to assign vertex name using aal116, but unfortunetely it does not work: I always get the same error Error in { : task 3 failed - "Invalid vertex names".
As you suggest, I can use a Linux system to overcome this problem. This is really useful information for me.
About your question..i don t get any error when using robustness(g, type='edge', measure='random'), everything works fine.
Thanks again for your help!

@xyang2uchicago
Copy link

xyang2uchicago commented Sep 30, 2022

Hi, Christopher,

I have the same issue even when I running the code on Linux.

sessionInfo()
R version 4.2.0 (2022-04-22)
Platform: x86_64-pc-linux-gnu (64-bit)
Running under: Scientific Linux 7.4 (Nitrogen)

Matrix products: default
BLAS/LAPACK: /software/openblas-0.3.13-el7-x86_64/lib/libopenblas_haswellp-r0.3.13.so

locale:
[1] LC_CTYPE=en_US.UTF-8 LC_NUMERIC=C
[3] LC_TIME=en_US.UTF-8 LC_COLLATE=en_US.UTF-8
[5] LC_MONETARY=en_US.UTF-8 LC_MESSAGES=en_US.UTF-8
[7] LC_PAPER=en_US.UTF-8 LC_NAME=C
[9] LC_ADDRESS=C LC_TELEPHONE=C
[11] LC_MEASUREMENT=en_US.UTF-8 LC_IDENTIFICATION=C

attached base packages:
[1] stats graphics grDevices utils datasets methods base

other attached packages:
[1] foreach_1.5.2 ggplot2_3.3.6 data.table_1.14.2 dplyr_1.0.9
[5] brainGraph_3.0.0 igraph_1.3.1

loaded via a namespace (and not attached):
[1] pillar_1.7.0 compiler_4.2.0 BiocManager_1.30.18
[4] iterators_1.0.14 tools_4.2.0 lifecycle_1.0.1
[7] tibble_3.1.7 gtable_0.3.0 lattice_0.20-45
[10] pkgconfig_2.0.3 rlang_1.0.2 Matrix_1.4-1
[13] cli_3.3.0 DBI_1.1.2 parallel_4.2.0
[16] withr_2.5.0 generics_0.1.2 vctrs_0.4.1
[19] grid_4.2.0 tidyselect_1.1.2 glue_1.6.2
[22] R6_2.5.1 fansi_1.0.3 purrr_0.3.4
[25] magrittr_2.0.3 scales_1.2.0 codetools_0.2-18
[28] ellipsis_0.3.2 MASS_7.3-56 abind_1.4-5
[31] assertthat_0.2.1 colorspace_2.0-3 permute_0.9-7
[34] utf8_1.2.2 doParallel_1.0.17 munsell_0.5.0
[37] crayon_1.5.1

My object is very simply as below and does have names for each vertex.

g
graph_list[[15]]
IGRAPH a7ef063 UN-- 33 144 --

  • attr: name (v/c), logFC_ave (v/n), FDR (v/n), combined_score
    | (e/n), btwn (e/n)
  • edges from a7ef063 (vertex names):
    [1] Icam2--Cd34 Icam2--Cd34 Gata2--Cd34 Gata2--Cd34 Icam2--Cd40
    [6] Icam2--Cd40 Cd34 --Cd40 Cd34 --Cd40 Gata2--Hhex Gata2--Hhex
    [11] Cd34 --Hhex Cd34 --Hhex Gata2--Sox17 Gata2--Sox17 Cd34 --Sox17
    [16] Cd34 --Sox17 Hhex --Sox17 Hhex --Sox17 Icam2--Cdh5 Icam2--Cdh5
    [21] Gata2--Cdh5 Gata2--Cdh5 Cd34 --Cdh5 Cd34 --Cdh5 Hhex --Cdh5
    [26] Hhex --Cdh5 Sox17--Cdh5 Sox17--Cdh5 Npr1 --Cdh5 Npr1 --Cdh5
    [31] Npr1 --Gngt2 Npr1 --Gngt2 Icam2--Igf1 Icam2--Igf1 Gata2--Igf1
  • ... omitted several edges

However, i can't go through to get the random estimation

robustness(g, "vertex", measure='random', N=3)
Error in { : task 3 failed - "Invalid vertex names"

Could you please have a look and give solution?

Thank you,
Holly

@tenguzame
Copy link

Greetings,
I am encountering the very same error, both on Windows and Linux. Using R v.4.2.1 on RStudio. I tried changing the vertex names, assigning random ones in different combinations, by using only strings or whatever, but the results are always the same:
Error in { : task 3 failed - "Invalid vertex names"
Has anybody managed to find a workaround?
Best regards

@cwatson
Copy link
Owner

cwatson commented Nov 28, 2022

Sorry for such a late response. I can replicate the error with some data provided by another user, so I'll have to work on an update that avoids using the vertex names. It does not appear to be a Windows issue, nor is it a R v3.x vs. v4.x issue.

I'll try to get a bugfix update in the next few weeks.

@scottwlee
Copy link

Hello, I also exprience this problem, when I use "vertext" type and "random" measure.
Could you look over it again, cwatson?

@cwatson
Copy link
Owner

cwatson commented Mar 24, 2023

Yes, I'll have to keep working on it. Sorry for such a long delay.

@sacrull
Copy link

sacrull commented Jan 12, 2024

Hello, I think I figured out what the issue was. I believe when it was going through the second loop it was deleting the vertices from the graph and when it tried to run the loop for the second time the graph (g) had no vertices since they were previously deleted and that is why it had the error.

if (type == 'vertex') {
    if (measure == 'random') {
      max.comp <- foreach(i=seq_len(N), .combine='cbind') %dopar% {
        ord <- V(g)$name[index[, i]]
        tmp <- rep.int(orig_max, n)
        for (j in seq_len(n - 1L)) { 
          g <- delete_vertices(g, ord[j]) #this specifically was causing the error i believe
          tmp[j + 1L] <- max(components(g)$csize)
        }
        tmp
      }
      max.comp.removed <- rowMeans(max.comp)
    }

I fixed it by changing it by changing that piece of code to:

if (type == 'vertex') {
    if (measure == 'random') {
      max.comp <- foreach(i=seq_len(N), .combine='cbind') %dopar% {
        ord <- igraph::V(g)$name[index[, i]]
        tmp <- rep.int(orig_max, n)
        g.new <- g # added line
        for (j in seq_len(n - 1L)) {
          g.new <- igraph::delete_vertices(g.new, ord[j]) #updated line
          tmp[j + 1L] <- max(igraph::components(g.new)$csize) # updated line
        }
        tmp
      }
      max.comp.removed <- rowMeans(max.comp)

    }

Hope this helps and thank you for this wonderful package!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

7 participants