我正在尝试迭代一个列表(在一个列表中),我遇到了一些麻烦,任何帮助都将不胜感激。
boston <- data.frame(Boston)
# Subset 1: zn - 2, chas-4, rm-6, dis-8, black-12,
# Subset 2: crim-1, indus-3, nox-5, age-7, tax-10, ptratio-11
# Subset 3: all
kvals <- c(1,3,5)
subset1 <- c("zn", "chas", "rm", "dis", "black")
subset2 <- c("crim", "indus", "nox", "age", "tax", "ptratio")
subset3 <- c(boston[,1:13])
x1.train <- boston[, c(subset1)]
x2.train <- boston[, c(subset2)]
x3.train <- boston[, 1:13]
y.train <- boston$medv01
xtrain.list <- list(x1.train, x2.train, x3.train)
for (j in kvals ){
message("~~~~ K = ", j, " ~~~~")
for (s in xtrain.list ){
knn.cv.pred <- knn.cv(xtrain.list[[s]],
y.train,
k = kvals[j])
message("Subset ", s, " K = ", j, " Error: ", mean(knn.cv.pred != y.train)*100, "%")
}
message("\n")
}但是我得到了这个错误
+ }Error in xtrain.list[[s]] : invalid subscript type 'list'发布于 2020-02-25 03:46:22
*更新了更好的reprex以调用适当的库
在R you中,编写for循环的一种方法是在for循环中使用seq_along函数。
boston <- data.frame(MASS::Boston)
# Subset 1: zn - 2, chas-4, rm-6, dis-8, black-12,
# Subset 2: crim-1, indus-3, nox-5, age-7, tax-10, ptratio-11
# Subset 3: all
kvals <- c(1,3,5)
subset1 <- c("zn", "chas", "rm", "dis", "black")
subset2 <- c("crim", "indus", "nox", "age", "tax", "ptratio")
subset3 <- c(boston[,1:13])
x1.train <- boston[, c(subset1)]
x2.train <- boston[, c(subset2)]
x3.train <- boston[, 1:13]
y.train <- boston$medv
xtrain.list <- list(x1.train, x2.train, x3.train)
for (k in seq_along(kvals) ){
message("~~~~ K = ", k, " ~~~~")
for (s in seq_along(xtrain.list) ){
knn.cv.pred <- class::knn.cv(xtrain.list[[s]],
y.train,
k = kvals[[k]])
message("Subset ", s, " K = ", k, " Error: ", mean(knn.cv.pred != y.train)*100, "%")
}
message("\n")
}https://stackoverflow.com/questions/60382707
复制相似问题