2015-11-07 49 views
2

我的示例數據集:線性disriminant功能錯誤 - 參數必須是相同的長度

year <- c("2002","2002","2002","2004","2005","2005","2005","2006", "2006") 
FA1 <- c(0.7975030, 1.5032768, 0.8805000, 1.0505961, 1.1379715, 1.1334510, 1.1359434, 0.9614926, 1.2631387) 
FA2 <- c(0.7930153, 1.2862355, 0.5633592, 1.0396431, 0.9446277, 1.1944455, 1.086171, 0.767955, 1.2385361) 
FA3 <- c(-0.7825210, 0.56415672, -0.9294417, 0.21485071, -0.447953,0.037978, 0.038363, -0.495383, 0.509704) 
FA4 <- c(0.38829957,0.34638035,-0.06783007, 0.505020, 0.3158221,0.55505411, 0.42822783, 0.36399347, 0.51352115) 
df <- data.frame(year,FA1,FA2,FA3,FA4) 

我再選擇我要使用的數據和運行一個DFA

library(magrittr) 
library(DiscriMiner) 
yeardf <- df[df$year %in% c(2002, 2005, 2006),] 
yeardfd <- linDA(yeardf[,2:4],yeardf$year, validation = "crossval") 

但現在我得到一個錯誤告訴我參數是不同的長度。

"Error in table(original = y[test], predicted = pred_class) : 
all arguments must have the same length" 

我看着

length(yeardf$year) 
dim(yeardf) 

而且看起來他們是相同的。 我也檢查拼寫錯誤,因爲這有時會導致此錯誤。

  • 以下是答案。
    建議的答案適用於我的示例數據(這確實給了我同樣的錯誤),但我不能完全使它在我的真實代碼上工作。

我第一次轉變應用於選定列在我的data.frame。然後,我結合了我想作爲團體使用的變量轉化列在我的DFA

library(robCompositions) 
tFA19 <- cenLR(fadata.PIZ[names(FA19)])[1] 
tFA19 <- cbind(fadata.PIZ[1:16],tFA19) 

所以,我認爲我創建這個data.frame方式必須導致我的錯誤。我試圖在我的cbind聲明中插入stringsAsFactors,但沒有運氣。

+0

看看'STR(tFA19)'。如果你看到那裏的因素,它將無法工作。 –

+0

啊!謝謝!!我已將因素轉換爲字符,現在一切都很好。 – heatherr

回答

1

你需要,stringsAsFactors = FALSEdata.frame

year <- c("2002","2002","2002","2004","2005","2005","2005","2006", "2006") 
FA1 <- c(0.7975030, 1.5032768, 0.8805000, 1.0505961, 1.1379715, 1.1334510, 1.1359434, 0.9614926, 1.2631387) 
FA2 <- c(0.7930153, 1.2862355, 0.5633592, 1.0396431, 0.9446277, 1.1944455, 1.086171, 0.767955, 1.2385361) 
FA3 <- c(-0.7825210, 0.56415672, -0.9294417, 0.21485071, -0.447953,0.037978, 0.038363, -0.495383, 0.509704) 
FA4 <- c(0.38829957,0.34638035,-0.06783007, 0.505020, 0.3158221,0.55505411, 0.42822783, 0.36399347, 0.51352115) 
df <- data.frame(year,FA1,FA2,FA3,FA4,stringsAsFactors = FALSE) 


library(magrittr) 
library(DiscriMiner) 
yeardf <- df[df$year %in% c(2002, 2005, 2006),] 
yeardfd <- linDA(yeardf[,2:4],yeardf$year, validation = "crossval") 
yeardfd 

Linear Discriminant Analysis 
------------------------------------------- 
$functions  discrimination functions 
$confusion  confusion matrix 
$scores   discriminant scores 
$classification assigned class 
$error_rate  error rate 
------------------------------------------- 

$functions 
      2002 2005 2006 
constant -345 -371 -305 
FA1  228 231 213 
... 
+0

謝謝!我的真實數據有點不同,雖然我可以用上面的示例數據重現錯誤,但修復程序對我來說並不適用。我會在我的原始文本中添加一些註釋,以便顯示我正在使用的代碼 – heatherr

相關問題