我正在对随机数据集进行聚类分析(精确数据集无关紧要)。在执行了分析并分配了最佳的簇编号以执行cutree()函数之后,我得到了一些重复的代码,用于生成摘要,并尝试通过循环替换这些摘要。
到目前为止,使用的代码是...
var pFrameOpt: UnsafeMutablePointer<AVFrame>? = av_frame_alloc()
avcodec_receive_frame(..., pFrameOpt)
let data3: UnsafeMutablePointer<UInt8>? = pFrameOpt?.pointee.data.3
data3?.withMemoryRebound(to: CVBuffer.self, capacity: 1) { pCvBuf in
let fW = pFrameOpt!.pointee.width // print 3840
let fH = pFrameOpt!.pointee.height // print 2160
let fFmt = pFrameOpt!.pointee.format // print 160
let cvBuf: CVBuffer = pCvBuf.pointee
let a1 = CVPixelBufferGetDataSize(cvBuf) // print 0
let a2 = CVPixelBufferGetPixelFormatType(cvBuf) // print 0
let a3 = CVPixelBufferGetWidth(cvBuf) // print 0
let a4 = CVPixelBufferGetHeight(cvBuf) // print 0
let a5 = CVPixelBufferGetBytesPerRow(cvBuf) // print 0
let a6 = CVPixelBufferGetBytesPerRowOfPlane(cvBuf, 0) // print 0
let a7 = CVPixelBufferGetWidthOfPlane(cvBuf, 0) // print 0
let a8 = CVPixelBufferGetHeightOfPlane(cvBuf, 0) // print 0
let a9 = CVPixelBufferGetPlaneCount(cvBuf) // print 0
let a10 = CVPixelBufferIsPlanar(cvBuf) // print false
let a11 = CVPixelBufferGetIOSurface(cvBuf) // print nil
let a12 = CVPixelBufferGetBaseAddress(cvBuf) // print nil
let a13 = CVPixelBufferGetBaseAddressOfPlane(cvBuf, 0) // print nil
let b1 = CVImageBufferGetCleanRect(cvBuf) // print 0, 0, 0, 0
let b2 = CVImageBufferGetColorSpace(cvBuf) // print nil
let b3 = CVImageBufferGetDisplaySize(cvBuf) // print 0, 0, 0, 0
let b4 = CVImageBufferGetEncodedSize(cvBuf) // print 0, 0, 0, 0
let b5 = CVImageBufferIsFlipped(cvBuf) // print false
// bad exec
var cvTextureOut: CVMetalTexture?
CVMetalTextureCacheCreateTextureFromImage(kCFAllocatorDefault, ..., cvBuf, nil, .bgra8Unorm, 3840, 2160, 0, ...)
}
我要替换的代码部分是...
library(cluster)
library(dplyr)
library(psych)
df_dist <- dist(df)
df_hclust <- hclust(df_dist, method = "ward.D2")
plot(df_hclust, hang = -1)
df_hclust_cut <- cutree(df_hclust, k = 4)
df <- mutate(df, cluster = df_hclust_cut)
我希望使用的代码是...
cluster1 <- filter(df, cluster == 1)
cluster2 <- filter(df, cluster == 2)
cluster3 <- filter(df, cluster == 3)
cluster4 <- filter(df, cluster == 4)
但是随后我收到以下错误消息...
paste0(“ cluster”,C)中的错误<-filter(df,cluster == C): 分配目标扩展为非语言对象
如何创建一个循环以创建四个过滤的数据集,并更改过滤功能中使用的值?
答案 0 :(得分:0)
如果您使用更复杂的表达式(如paste0
解决方案是将所有内容包装在assign
中。
for (C in 1:4) {
assign(paste0("cluster", C),filter(df, cluster == C))
}