Ошибка возникает в строке 15: PCA_pre <- prcomp(X[,c(names(X) %in% PCA_vars[i,])])
На самом деле, это работает при первом запуске, когда i = 1. Но он завершается неудачно при втором запуске, когда i = 2 по следующей причине.
В строке 27 вы изменяете X
, назначая его Xnew
:
27: X <- Xnew
, что создано в строке 26:
26: `Xnew <- cbind(X,tmp)
, которую я не могу понять. В любом случае, tmp
назначается в строке 19 (если главный компонент захватывает> 0,95 от общей дисперсии) или в строке 22 (если это не так).
19: tmp <- data.frame(predict(PCA_pre, X)[,1])
22: tmp <- predict(PCA_pre,X)
Это также сбивает с толку меня, потому что при строка 19 tmp
будет иметь класс «data.frame», а строка 22 - класс «matrix». Это важно позже, когда вы создаете объект Xnew
в строке 26 (см. Выше). Если tmp
является фреймом данных, то Xnew
будет «матрицей», у которой нет атрибута names:
names(X)
NULL
И вот почему вы получаете ошибку в строке 15 (см. Выше) ; функция prcomp
пытается запустить PCA на пустом множестве.
Я думаю, что решение может заключаться в том, чтобы не использовать функцию data.frame () в строке 19.
19: tmp <- predict(PCA_pre, X)[,1]
Я проверил это на примере набора данных "xts", но, кажется, он работает вечно. Но, по крайней мере, ошибки нет.
И, кроме того, строка 17 может быть опущена, поскольку она, похоже, ничего не делает.
17: tmp <- data.frame()