【发布时间】:2019-11-30 23:30:37
【问题描述】:
我想使用 nndist.ppx() 计算到给定 Kmeans 集群内最近邻居的距离(df$cluster 是 as.factor)。首先使用 kmeans(df,2) 识别集群,然后我将集群向量 cbind 到原始 df,然后使用 ppx(df,simplify=F) 将其转换为类 ppx,因为 df 是 3D (xyz) 和 nndist( ) 需要类 ppx。
问题是我只能得到 nndist.ppx 来计算到 df 中所有点的距离,而不管集群。 This question 接近于我正在寻找的那个距离,正在有节制地计算。
从练习数据开始,这是一个包含 df 类的 2 个元素的列表
library(spatstat)
library(stats)
df_a1 <- data.frame(X = c(9,9,10,10,17,20,22,25,40,40,42),
Y=c(10,10,11,11,105,106,108,109,112,113,114), Z=c(1,1,1,1,3,4,4,6,8,8,8))
df_a2 <- data.frame(X = c(9,9,10,10,15,22,26,30,40,40,42),
Y=c(10,10,11,11,105,106,108,109,112,113,114), Z=c(1,1,1,1,5,5,4,5,7,7,8))
list_a <- list(df_a1,df_a2)
df_a_list_names<-c("control", "variable")
运行 kmeans 聚类: 这是我的 Kmeans fxn,它也将 Kmeans 聚类向量绑定到原始 df。然后我将 kmeans_fxn 应用到 dfs 列表上。输出存储在一个新列表中。
kmeans_fxn<-function(x){
kmeans(x,(3))->results
results$cluster->cluster
cluster->x$cluster
as.factor(x$cluster)->x$cluster
return(x)
}
lapply(list_a, kmeans_fxn)->kmean_results_list
计算最近邻的距离:
这是我写的 fxn,用于计算每个数据点与其前 2 个最近邻居之间的距离。然后我将 fxn 应用到先前创建的列表中
distance_fxn<-function(x){
x<-ppx(x, simplify=F)->df.ppx
nndist.ppx(df.ppx,k=2)->x
as.data.frame(x)->x
return(x)
}
lapply(kmean_results_list, distance_fxn)->nearest_list
输出是与整个 df 中最近邻居的距离,与集群无关(我在没有集群列的情况下重复,输出相同...未显示)。
我也试过了
kmeans_results_list[[1]]->fob
ppx(fob, simplify=F)->fob.ppx
by(fob.ppx[[1]], cluster, function(x) nndist.ppx(fob.ppx, k=2))
这个,但都没有用
by(fob.ppx, fob.ppx[[1]], function(x) nndist.ppx(fob.ppx, k=2))
【问题讨论】: