提取每两个连续元素之间的差异
Extract difference between every 2 consecutive elements
我有一个数值列表,我需要计算一个新列表,该列表由原始列表中每两个连续元素的差值组成。
我有这个代码:
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
等等等等
任何帮助表示赞赏
您可以简单地使用
diff(wss)
其中 returns 差异向量。
说明你做错了什么。 lapply 应该用在列表上,并为列表中的每个元素计算一个函数。这在这里不适用,因为:i)你没有列表,ii)你需要 2 个连续元素之间的差异以及你使用的方法,即使它是一个列表,你也只提供一个函数 diff
我有一个数值列表,我需要计算一个新列表,该列表由原始列表中每两个连续元素的差值组成。 我有这个代码:
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 等等等等 任何帮助表示赞赏
您可以简单地使用
diff(wss)
其中 returns 差异向量。
说明你做错了什么。 lapply 应该用在列表上,并为列表中的每个元素计算一个函数。这在这里不适用,因为:i)你没有列表,ii)你需要 2 个连续元素之间的差异以及你使用的方法,即使它是一个列表,你也只提供一个函数 diff