我在尝试绘制一些我用某些数据训练的LDA分类器的图表时,遇到了一个奇怪的错误:
> plot(CSP.reduced.LDA)Error in terms.formula(formula, data = data) : duplicated name 'CSP.1' in data frame using '.'
我不确定什么是最小工作示例,但我可以提供数据的大致情况:
> summary(CSP.by.trial[[subject.ind]]) CSP.1 CSP.2 CSP.3 CSP.4 targets Min. :1.206 Min. :1.780 Min. :0.0864 Min. :2.714 0:140 1st Qu.:1.407 1st Qu.:3.398 1st Qu.:0.2300 1st Qu.:3.205 1:140 Median :1.470 Median :3.784 Median :0.3044 Median :3.428 Mean :1.477 Mean :3.804 Mean :0.3247 Mean :3.500 3rd Qu.:1.546 3rd Qu.:4.218 3rd Qu.:0.3986 3rd Qu.:3.723 Max. :1.762 Max. :5.454 Max. :0.9466 Max. :5.142> CSP.reduced.LDA$termsCSP.by.trial$targets ~ CSP.1 + CSP.2 + CSP.3 + CSP.4attr(,"variables")list(CSP.by.trial$targets, CSP.1, CSP.2, CSP.3, CSP.4)attr(,"factors") CSP.1 CSP.2 CSP.3 CSP.4CSP.by.trial$targets 0 0 0 0CSP.1 1 0 0 0CSP.2 0 1 0 0CSP.3 0 0 1 0CSP.4 0 0 0 1attr(,"term.labels")[1] "CSP.1" "CSP.2" "CSP.3" "CSP.4"attr(,"order")[1] 1 1 1 1attr(,"intercept")[1] 1attr(,"response")[1] 1attr(,".Environment")<environment: R_GlobalEnv>attr(,"predvars")list(CSP.by.trial$targets, CSP.1, CSP.2, CSP.3, CSP.4)attr(,"dataClasses")CSP.by.trial$targets CSP.1 CSP.2 "factor" "numeric" "numeric" CSP.3 CSP.4 "numeric" "numeric"
回答:
等等,我明白了。看起来MASS包中的plot.lda()
函数在处理列名中的.
时会出问题。将它们替换为空格字符就解决了问题。不过,我不明白为什么一开始lda()
函数不会因此出错。