线性判别函数错误 - 参数必须是相同的长度

时间:2015-11-07 20:06:21

标签: r

我的示例数据集:

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必须导致我的错误。我尝试将stringsAsFactors插入我的cbind语句中,但没有运气。

1 个答案:

答案 0 :(得分:1)

您需要stringsAsFactors = FALSE中的data.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
...