Доступ к списку внутри списка через l oop в R - PullRequest
0 голосов
/ 24 февраля 2020

Я пытаюсь перебрать список (в списке), и у меня возникли некоторые проблемы, любая помощь будет принята.

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'

1 Ответ

2 голосов
/ 24 февраля 2020

*** Обновлено с лучшим представлением для вызова соответствующих библиотек

В R вы можете написать a для l oop, используя seq_along функцию внутри для l oop.

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")
}

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...