Для L oop для функции не добавляется список / датафрейм - PullRequest
0 голосов
/ 15 января 2020

Я пытаюсь выполнить домашнее задание для класса по аналитике. Мы используем функцию kknn (K ближайший сосед) для классификации. В любом случае, for l oop, похоже, не выполняет итерацию по значениям i, как я намереваюсь:

Сначала я попытался инициализировать список и попытаться добавить его, используя запись в двойных скобках, но я заметил, в моем глобальном окружении этот список содержал только один элемент. Я попытался использовать нотацию $, чтобы добавить список, и тот же результат. Затем я попытался запустить фрейм данных и использовать rbind для расширения фрейма с каждой итерацией for для l oop, в надежде, что это поможет. Это все еще дает мне только один элемент в моем фрейме данных.

klist = list()

for(i in 1:654)
  {CCmodel_knn <- kknn(V11~V1+V2+V3+V4+V5+V6+V7+V8+V9+V10, CCdata[-i,],CCdata[i,],k=10,distance = 2,kernel ="optimal",scale = TRUE)

fittedValues <- fitted.values(CCmodel_knn)

klist$fittedValues <- i}

и я попытался klist[[fittedValues]] <- i

Вот код, который я использовал для кадра данных:

kframe <- data.frame(ivalue = i, FV = fittedValues)

for(i in 1:654)
  {CCmodel_knn <- kknn(V11~V1+V2+V3+V4+V5+V6+V7+V8+V9+V10, CCdata[-i,],CCdata[i,],k=10,distance = 2,kernel ="optimal",scale = TRUE)

fittedValues <- fitted.values(CCmodel_knn)

rbind(kframe, i, fittedValues)}

Любые предложения о том, как получить для l oop добавить в мой список? Как видите, мой диапазон равен i в 1: 654, поэтому я ожидаю 654 строки / списка данных.

1 Ответ

0 голосов
/ 15 января 2020

Ваш l oop записывает в одну и ту же переменную каждый раз. Вам нужно добавить его в список, а затем обработать весь список в конце.

Попробуйте:

klist = list()

for(i in 1:654) 
{
  CCmodel_knn <- kknn(V11 ~ V1 + V2 + V3 + V4 + V5 + V6 + V7 + V8 + V9 + V10, 
                      CCdata[-i,], CCdata[i,], k = 10, distance = 2, 
                      kernel = "optimal", scale = TRUE)

  klist[[i]] <- fitted.values(CCmodel_knn)
}

kframe <- do.call("rbind", klist)

Затем вам может понадобиться сделать

kframe <- as.data.frame(kframe)
...