我正在使用qcc软件包。我正在循环中针对多种材料运行一个简单的process.capability图。当它遍历各列时,图的标题始终是df.1 [i],而不是列名。
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()
}
答案 0 :(得分:1)
您可以结合使用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”)
答案 1 :(得分:0)
自从我发布此内容以来,Luca添加了一项新功能来编辑标题,从而消除了对此的需要。因此,为此,我仅在函数中添加了一个标题调用。
title = paste(colnames(df.1)[i]))