2016-03-21 2 views
-3

У меня есть список числовых значений, и мне нужно рассчитать новый список, который будет состоять из разницы каждых двух последовательных элементов из исходного списка. У меня есть этот код:Извлечение разницы между каждыми 2 последовательными элементами

wss <- (nrow(dat)-1)*sum(apply(dat,2,var)) 
    for (i in 2:15) wss[i] <- sum(kmeans(dat, 
             centers=i)$withinss) 
    plot(1:15, wss, type="b", xlab="Number of Clusters", 
     ylab="Within groups sum of squares") 

    # choose optimal k where sos derivative is large for the first time 
diff <- lapply(wss, diff) 

так мой первоначальный список WSS

> dput(wss) 
c(4155212952468.46, 4021505707879.36, 4017356406677.14, 4015231535838.63, 
4013350949497.91, 17067610483.738, 17023281391.9182, 4013258218594.64, 
14454798910.9291, 16989216167.6064, 14860266330.575, 14480295584.8302, 
14506662229.3596, 14289181733.1553, 14283121461.9347) 

и в списке результатов я бы ожидать, что первый элемент будет 4155212952468,46 - 4021505707879,36 второй элемент будет +4021505707879,36 - 4017356406677.14 и т. Д. Любая помощь по оценке

+1

Пожалуйста, используйте правильную терминологию. У вас есть вектор, а не список. – Roland

ответ

0

Вы c простое использование

diff(wss) 

который возвращает вектор различий.

Чтобы проиллюстрировать, что вы сделали неправильно. lapply следует использовать в списке и оценивать функцию для каждого элемента в списке. Это не применимо здесь, потому что: i) у вас нет списка, ii) вам нужны различия между двумя последовательными элементами и в методе, который вы использовали, даже если это был список, вы только поставляете его функции diff

+1

Нет, он возвращает вектор, а не массив. – Roland

Смежные вопросы