object of type 'closure' is not subsettable error when 运行 prcomp
object of type 'closure' is not subsettable error when running prcomp
我正在尝试 运行 r 上的 PCA,遵循我在网上找到的一些代码,但与编写代码的人不同,我得到了错误:
object of type 'closure' is not subsettable
我正在使用叶数据集,您可以在这里找到它:
http://archive.ics.uci.edu/ml/datasets/Leaf
这些特征是:物种、样本数、偏心率、纵横比、伸长率、坚固性、随机凸性、等周因子、最大压痕深度、裂片度、平均强度、平均对比度、光滑度、三次矩、均匀性、熵
每一列都是数字,正如我想预测的那样'Species'我不需要样本编号:
leaf_data <- leaf_data[, c(1,3:ncol(leaf_data))]
现在,为了准备训练数据,我使用了以下函数:
stratified_labels <- function(df, variable, size){
set.seed(1000)
require(sampling)
temp = df
dfCounts <- table(df[variable])
if (size > min(dfCounts)){
size <- min(dfCounts)
}
if (size < 1 ){
size = ceiling(table(temp[variable])*size)
} else if (size >=1){
size = rep(size, times=length(table(temp[variable])))
}
strat = strata(temp, stratanames=names(temp[variable]),
size = size, method = 'srswor')
return(strat$ID_unit)
}
这确保每个 class 都有统一数量的代表。然后我们就可以准备训练集和测试集了:
training_set <- stratified_labels(leaf_data, 'Species', .8)
leaf_data$Species <- as.factor(leaf_data$Species)
leaf_train <- leaf_data[training_set,]
leaf_test <- leaf_data[-training_set,]
由于变量没有标准化,所以我这样写:
leaf_train_standard <- leaf_train
standardization <- function(x){
x <- (x-mean(x))/sd(x)
return(x)
}
leaf_train_standard[2:15]<-apply(leaf_train[2:15],2, standardization)
所以现在我理论上已经准备好 运行 prcomp:
set.seed(1000)
pca_train <- leaf_train_standard[2:15]
pca_test <- leaf_test
pca <- prcomp[data = pca_train, center=FALSE, scale=FALSE]
但是在最后一行代码之后我得到了上面所说的错误,我真的不明白为什么。感谢任何帮助。
pca <- prcomp[data = pca_train, center=FALSE, scale=FALSE]
正如错误消息所示,您在这里使用了 subsetting([…]
运算符)。你想使用 (…)
:
pca <- prcomp(data = pca_train, center = FALSE, scale = FALSE)
另外两条评论:
您的 standardization
功能是不必要的。只需将 center = TRUE
和 scale = TRUE
传递给 prcomp
.
和don’t use require
— use library
instead.
我正在尝试 运行 r 上的 PCA,遵循我在网上找到的一些代码,但与编写代码的人不同,我得到了错误:
object of type 'closure' is not subsettable
我正在使用叶数据集,您可以在这里找到它:
http://archive.ics.uci.edu/ml/datasets/Leaf
这些特征是:物种、样本数、偏心率、纵横比、伸长率、坚固性、随机凸性、等周因子、最大压痕深度、裂片度、平均强度、平均对比度、光滑度、三次矩、均匀性、熵
每一列都是数字,正如我想预测的那样'Species'我不需要样本编号:
leaf_data <- leaf_data[, c(1,3:ncol(leaf_data))]
现在,为了准备训练数据,我使用了以下函数:
stratified_labels <- function(df, variable, size){
set.seed(1000)
require(sampling)
temp = df
dfCounts <- table(df[variable])
if (size > min(dfCounts)){
size <- min(dfCounts)
}
if (size < 1 ){
size = ceiling(table(temp[variable])*size)
} else if (size >=1){
size = rep(size, times=length(table(temp[variable])))
}
strat = strata(temp, stratanames=names(temp[variable]),
size = size, method = 'srswor')
return(strat$ID_unit)
}
这确保每个 class 都有统一数量的代表。然后我们就可以准备训练集和测试集了:
training_set <- stratified_labels(leaf_data, 'Species', .8)
leaf_data$Species <- as.factor(leaf_data$Species)
leaf_train <- leaf_data[training_set,]
leaf_test <- leaf_data[-training_set,]
由于变量没有标准化,所以我这样写:
leaf_train_standard <- leaf_train
standardization <- function(x){
x <- (x-mean(x))/sd(x)
return(x)
}
leaf_train_standard[2:15]<-apply(leaf_train[2:15],2, standardization)
所以现在我理论上已经准备好 运行 prcomp:
set.seed(1000)
pca_train <- leaf_train_standard[2:15]
pca_test <- leaf_test
pca <- prcomp[data = pca_train, center=FALSE, scale=FALSE]
但是在最后一行代码之后我得到了上面所说的错误,我真的不明白为什么。感谢任何帮助。
pca <- prcomp[data = pca_train, center=FALSE, scale=FALSE]
正如错误消息所示,您在这里使用了 subsetting([…]
运算符)。你想使用 (…)
:
pca <- prcomp(data = pca_train, center = FALSE, scale = FALSE)
另外两条评论:
您的 standardization
功能是不必要的。只需将 center = TRUE
和 scale = TRUE
传递给 prcomp
.
和don’t use require
— use library
instead.