2
我正在尝试编写一些将采用数据框并绘制每个数字列的东西,并对正常分布的非正态分布和控制图进行简单绘图:将函数应用于名称上的数据框中的每一列
library(plyr)
library(qcc)
library(ggplot2)
#generate data frame
data <- data.frame(seq_len(10),LETTERS[seq_len(10)],rnorm(10,5,3),rep(1,10),rep(2,10),rnorm(10,3,1),runif(10))
##checks heterogeneity
has_range <- function(data) { if(all(abs(data - mean(data)) == 0)) FALSE else TRUE}
##test for normality
normtest <- function(data) {if(has_range(data) == FALSE) FALSE else {
if(shapiro.test(data)$p.value < 0.05) FALSE else TRUE}}
##Control charts for Normal data, simple plots otherwise
drawplot<-function(data, ref=NULL) {
Sys.sleep(.1)
print(names(data))
if(normtest(data) == FALSE) {
plot(x=ref, y=data, ylab=names(data))
} else {
qcc(data,type="xbar.one", labels=ref, ylab=names(data))
}
}
## Apply drawplot to all numeric columns in data frame
colwise(drawplot, is.numeric, ref=data[[2]])(data)
的问题是,每一个申请家庭的功能似乎会列名,我不能使用列名来标记图:
print(names(data))
给出NULL结果。
也有被裁剪了一个看似不相关的错误:
Error: length(rows) == 1 is not TRUE
感谢mnel,这似乎工作。只需要向任何人复制,您必须在此修改中将您创建的原始数据框命名为'dd'。现在我要去查看图表,看看我是否可以使用ggplot2而不是plot。另外,有一个基于ggplot2的qcc软件包会很好。 – variable 2013-03-26 02:13:08
@variable - 是的,我会重命名。我不喜欢'data'作为变量名,因为有一个'data'函数。 – mnel 2013-03-26 02:28:21