2016-12-26 82 views
0

我一直在使用rgp(遺傳編程)軟件包來預測泰坦尼克號的生存。輸入數據幀火車是training data from Kaggle,Sex變量的女性爲0,男性爲1。鑑於此,代碼是:package rgp in r給出了不能被抑制的「NaNs產生」輸出

fs <- functionSet("+", "-", "*", "exp", "sin", "cos") 
ivs <- inputVariableSet("Sex") 
cfs <- constantFactorySet(function() rnorm(1)) 
ff <- function(f) { 
    err <- rmse(as.numeric(f(train$Sex)), as.numeric(train$Survived)) 
    if (is.na(err)) return(1e12) else return(err) 
} 

set.seed(42) 
gp <- geneticProgramming(functionSet = fs, 
         inputVariables = ivs, 
         constantSet = cfs, 
         fitnessFunction = ff, 
         stopCondition = makeTimeStopCondition(60), 
         verbose = FALSE) 

問題是遺傳編程功能輸出「NaNs產生」頻繁。事實上,如果我運行足夠長的時間(例如一夜之間),輸出足以掛起r和rstudio。 (我想要運行的實際代碼更多地涉及「NaNs生成」打印更頻繁,但這個縮短版本足以顯示問題。)

我想要抑制geneticProgramming的所有輸出。 verbose = FALSE選項不解決「NaNs產生」輸出。

我試過使用capture.output,sink和不可見。我在R markdown單元格中嘗試過echo = FALSE。一切都無濟於事。我會認爲sink(「/ dev/null」)可以解決問題,但它不會。

這個輸出來自哪裏,如果通常的方法不起作用,我該如何抑制它?

非常感謝。

回答

0

在你的functionSet中,刪除「sin」和「cos」。當這些被移除時,NaN不會被生產出來。