我是一位有用的助手,可以为您翻译文本。
然而,
显然,很难提供一个可复制的示例。有任何想法是什么原因呢?
寻找常数列:
所以没有固定的列。NA值也是如此 -
但之后两者仍然会给出完全相同的错误提示:
相同的错误。数字数据?
我有一个包含9个样本(行)和51608个变量(列)的数据集,但每当我尝试进行规模调整时,就会出现错误:
这个工作正常。
pca = prcomp(pca_data)
然而,
pca = prcomp(pca_data, scale = T)
提供
> Error in prcomp.default(pca_data, center = T, scale = T) :
cannot rescale a constant/zero column to unit variance
显然,很难提供一个可复制的示例。有任何想法是什么原因呢?
寻找常数列:
sapply(1:ncol(pca_data), function(x){
length = unique(pca_data[, x]) %>% length
}) %>% table
输出:
.
2 3 4 5 6 7 8 9
3892 4189 2124 1783 1622 2078 5179 30741
所以没有固定的列。NA值也是如此 -
is.na(pca_data) %>% sum
>[1] 0
这个可以正常工作:
pca_data = scale(pca_data)
但之后两者仍然会给出完全相同的错误提示:
pca = prcomp(pca_data)
pca = prcomp(pca_data, center = F, scale = F)
那么为什么我不能对这些数据进行缩放的PCA呢?好吧,让我们确保它不是常数。
pca_data = pca_data + rnorm(nrow(pca_data) * ncol(pca_data))
相同的错误。数字数据?
sapply( 1:nrow(pca_data), function(row){
sapply(1:ncol(pca_data), function(column){
!is.numeric(pca_data[row, column])
})
} ) %>% sum
仍旧出现相同的错误,我已经没有任何想法。
编辑:需要更多的尝试和至少一种hack来解决它。
后来,我还是很难对这些数据进行聚类,例如:
Error in hclust(d, method = "ward.D") :
NaN dissimilarity value in intermediate results.
将小于某个截止值(例如<1)的值裁剪为零并没有任何效果。最终有效的方法是裁剪所有列中的零超过x个的列。对于#零<=6,它有效,但7个或更多会出错。不知道这是否意味着这是一个普遍问题,还是仅仅偶然捕捉到了一个有问题的列。如果有人有任何想法,仍然很乐意听到,因为只要没有变量全部为零(或以其他方式为常数),这就应该工作得非常好。
sum(!is.finite(scale(pca_data)))
给你什么结果。 - Hong Ooi