我正在计算许多回归的残差,然后用 ggplot 绘制这些残差。
我从数据文件中获取了 6 个感兴趣的变量,并创建了子字段数据文件(6 列,116 行)。
线性回归模型:
buildres <- sapply(seq_along(subfieldsdata), function(i) lm(subfieldsdata[,i] ~ myData$NP_Age+myData$sex+myData$YrsOfEd), simplify=FALSE, USE.NAMES=TRUE)
残差的计算:
getres <- vapply(buildres, stdres, numeric(116))
添加列名称:
colnames(getres) <- c("Subiculum residuals", "Presubiculum residuals", "CA1 residuals", "CA3 residuals", "CA4 residuals", "Dentate gyrus residuals")
然后我有一个 ggplot 的 for 循环:
for (i in 1:ncol (getres)) {
gp <- ggplot(data=subfieldsdata,aes(x=ECtau.res,y=getres[,i])) + geom_point(colour="Blue", shape=17, size=5)
gp <- gp +
stat_smooth(method="lm", colour="Blue", size=2, fill="Blue") +
scale_y_continuous(breaks=seq(-4, max(getres[,i])*1.1, 0.5)) +
theme_grey(base_size=35) +
labs(x="EC tau residuals", y=colnames(getres)[i]))
print (gp)
ggsave(sprintf("ECtau%s.png", colnames((getres)[i]),gp))
}
我收到此错误消息:
Saving 7 x 7 in image
Error in strsplit(filename, "\\.")[[1]] : subscript out of bounds
我不能是尺寸:
dim(getres)
[1] 116 6
我还检查了colnames:
> colnames(getres)
[1] "Subiculum residuals" "Presubiculum residuals" "CA1 residuals" "CA3 residuals"
[5] "CA4 residuals" "Dentate gyrus residuals"
你知道可能出现什么问题吗?
谢谢!
最佳答案
欢迎来到 Stack Overflow 海蒂:)
这个(你的图有一些假数据和文件名的临时变量)对我来说效果很好:
# Weird Error Message
ncol <- 6
nrow <- 116
subfieldsdata <- data.frame(matrix(rnorm(ncol*nrow),nrow,ncol))
colnames(subfieldsdata)[1] <- "ECtau.res"
getres <- data.frame(matrix(rnorm(ncol*nrow),nrow,ncol))
colnames(getres) <- c("Subiculum residuals", "Presubiculum residuals",
"CA1 residuals", "CA3 residuals",
"CA4 residuals", "Dentate gyrus residuals")
for (i in 1:ncol (getres)) {
gp <- ggplot(data=subfieldsdata,aes(x=ECtau.res,y=getres[,i])) +
geom_point(colour="Blue", shape=17, size=5)
gp <- gp +
stat_smooth(method="lm", colour="Blue", size=2, fill="Blue") +
scale_y_continuous(breaks=seq(-4, max(getres[,i])*1.1, 0.5)) +
theme_grey(base_size=35) +
labs(x="EC tau residuals", y=colnames(getres)[i])
print (gp)
fname <- sprintf("ECtau%s.png", colnames((getres)[i]))
print(sprintf("Saving %s ",fname))
ggsave(fname,gp)
}
输出:
[1] "Saving ECtauSubiculum residuals.png "
Saving 7.62 x 7.11 in image
[1] "Saving ECtauPresubiculum residuals.png "
Saving 7.62 x 7.11 in image
[1] "Saving ECtauCA1 residuals.png "
Saving 7.62 x 7.11 in image
[1] "Saving ECtauCA3 residuals.png "
Saving 7.62 x 7.11 in image
[1] "Saving ECtauCA4 residuals.png "
Saving 7.62 x 7.11 in image
[1] "Saving ECtauDentate gyrus residuals.png "
Saving 7.62 x 7.11 in image
>
最后一个情节:
它们是您的代码中的一个拼写错误(实验室参数中的括号过多),所以我认为这可能不是您的问题代码的精确重复。显然问题出在您的文件名中,该文件名出了问题,这就是我将其打印出来的原因。
我建议打印出文件名并查看出了什么问题。
现在我想到了,另一个猜测是您的 subfieldsdata
数据帧的列名称中有一些句点(即“.”字符),这些句点混淆了 ggsave
例程。这可能是问题所在 - 尝试使用破折号或其他东西代替。
也将此作为如何创建正确可重现问题的教训。 :)
关于r - 使用 ggsave/sprintf 出现奇怪的错误消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34386592/