0

我正在使用 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()
}
4

2 回答 2

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。(类似于您之前使用的“与”)

在此处输入图像描述

于 2019-12-17T23:09:31.137 回答
1

自从我发布了这个,Luca 添加了一个新的功能来编辑标题,这消除了对这个的需要。所以,为此我只是在函数中添加了一个标题调用。

title = paste(colnames(df.1)[i]))
于 2019-12-18T14:28:13.683 回答