我正在使用qcc包。我在循环中为多个材质运行了一个简单的process.capability图。当它在列中循环时,绘图的标题始终是df.1i,而不是列名。
process.capability(qcc(df.1[i], type="xbar.one"), nsigmas = 3, spec.limits = c(NA, 20), add.stats = T)或者相反,是否可以在循环中使用实际的列名?
process.capability(qcc(df.1$Aluminum, type="xbar.one"), nsigmas = 3, spec.limits = c(NA, 20), add.stats = T)完整的循环如下:
for (i in 5:length(colnames(df.1))){
df.2 <- df.1 %>%
rename(test_metal = colnames(df.1[i]))
test_group = with(df.2, qcc.groups(test_metal, batch_num))
png("test_plot.png")
q1 <- qcc(test_group, type = "xbar.one", nsigmas = 3, chart.all = F, ylim = c(0, max(df.1$Aluminum)), title = paste(colnames(df.1)[i]))
dev.off()
}发布于 2019-12-18 07:09:31
您可以组合使用eval和substitute来以正确的形式调用process.capability。我使用了qcc包中的一个示例:
library(qcc)
df.1 <- pistonrings
df.1 = cbind(pistonrings,
replicate(3,pistonrings$diameter+rpois(nrow(pistonrings),3))
)
colnames(df.1)[4:6] = c("d1","d2","d3")
pdf("test.pdf")
for (i in colnames(df.1)[4:6]){
eval(
substitute(
process.capability(qcc(X, type="xbar.one"),
nsigmas = 3, spec.limits = c(NA, 20), add.stats = T),
list(X=as.name(i))
),df.1)
}
dev.off()简要说明,首先使用替换将"X“替换为要绘制的列名称。然后,这仍然是一个表达式,您必须对其使用eval,以及data.frame df.1。(就像你之前用过的"with“)

发布于 2019-12-18 22:28:14
自从我发布了这篇文章后,Luca添加了一个新的功能来编辑标题,这就消除了对此的需求。为此,我在函数中简单地添加了一个标题调用。
title = paste(colnames(df.1)[i]))https://stackoverflow.com/questions/59379498
复制相似问题