Я работаю с пакетом «igraph» и функцией «evalWithTimeout» в «R.utils».evalWithTimeout игнорируется при вызове подпрограмм C/Fortran?
Я пытаюсь выполнить максимальное обнаружение клики, которое, как я знаю, может стать ужасным (как ужасное O (3^n), являющееся n числом узлов), поэтому я инкапсулировался в timeOut, но он игнорируется.
Минимальный код, чтобы воспроизвести проблему
library(igraph)
library(R.utils)
g<-erdos.renyi.game(1e6,1e7,type="gnm")
o<-evalWithTimeout(maximal.cliques(g),timeout=1)
Это должно остановить через одну секунду. Однако это не так. Интересно, связано ли это с использованием базового кода C/Fortran (что и делает maximal.cliques). Если да, то как я могу это решить?
Но довольно сложно сделать C-код прерывистым ... вам просто нужно поместить вызовы в R_checkUserInterrupt() 'в стратегических местах. –
Нет, это не тривиально, потому что вам нужно освободить память, и это нетривиально, если функция C, которую вы вызываете, вызывает другие функции C и т. Д. –