Функция использует stdio вместо Rprintf
/ REprintf
или warning
, поэтому перенаправление выхода R не будет работать.Правильное решение состоит в том, чтобы исправить вызовы в libsvm
, чтобы вместо них использовать вывод R.
Возможно взломать вывод stdio - вы можете перенаправить вывод в свой собственный канал и сделатьчто вы хотите с ним, но а) это немного работы в C и б) это опасно, потому что вам нужно восстановить стандартное поведение после того, как вы закончите с функцией - даже если она выдает ошибку и в) может взаимодействовать сВывод R. если используется в оболочке.
Если вы хотите действительно дурацкое, грязное, но быстрое решение, запустите вашу функцию в collect(parallel(..., silent=TRUE))[[1]]
из multicore
- она подавляет stdout (вы можетедобавьте multicore:::closeStderr()
, если вы хотите отключить stderr ).