我之前曾问过这个question这对绘制函数很有用。我想尝试在相同的轴上绘制20个函数,以说明函数在两个范围之间的变化。我已经使用单独指定的函数成功完成了此操作,但我想使用循环来完成此操作。
我试图做的是:
## add ggplot2
library(ggplot2)
library(lattice)
# Declare local variables
inPath = "D:/R_Analysis/"
inFile = "sample.txt"
outPath = "D:/R_Analysis/"
outFile = "processed_sample.txt"
pdfOutPath = "D:/R_Analysis/"
pdfOutFile = "processed_sample.pdf"
# Declare Chart values
y_label = "x-axis"
x_label = "y-axis"
chart_title = "..."
#####################################################################
## Read in data;
analysis <-
read.table(paste(inPath, inFile, sep=""), header=TRUE, sep=",",
na.strings="NA", dec=".", strip.white=TRUE)
# Setup pdf
pdf(paste(pdfOutPath, pdfOutFile, sep=""),height=6,width=9)
# make plot object
p <- qplot(
data = data.frame(x = x, y = y), x, y, xlab = x_label, ylab = y_label,
enter code herexlim = x_range, main = chart_title )
# make empty function
eq_dummy = function(x){ 0 }
d = stat_function(fun = eq_dummy)
##############
# LOOP #######
for(i in 1 : 21){
# Specify Variables
intercept = analysis[i,2]
slope = analysis[i,3]
# Define Curve
eq <- function(x) { slope * log(x) + intercept }
# Make plot object
composite <- stat_function(fun=eq)
composite = composite + d
}
print(p + composite)
# Show warnings
warnings()
# close the PDF file
dev.off()
有关语法改进或编程结构的任何建议都将受到赞赏。谢谢。
答案 0 :(得分:3)
有一个很好的函数file.path
,允许创建独立于OS的文件路径。您可以在代码中使用它:
inPath = file.path("D:","R_Analysis")
inFile = "sample.txt"
outPath = file.path("D:","R_Analysis")
outFile = "processed_sample.txt"
pdfOutPath = file.path("D:","R_Analysis")
pdfOutFile = "processed_sample.pdf"
然后使用
read.table(file.path(inPath, inFile))
pdf(file.path(pdfOutPath, pdfOutFile))
你的路径是“windows-depended”(对磁盘标签的引用),但是如果你使用亲戚路径那么它可能会更有用。
第二个提示 - 你应该尽可能晚地打开图形设备,例如
pdf(file.path(pdfOutPath, pdfOutFile),height=6,width=9)
print(p + composite)
dev.off()
当你想在窗口而不是文件中看到情节时,搜索正确的线条会更容易。
答案 1 :(得分:1)
与您的风格保持一致。例如,始终使用<-
,或始终使用=
;不要混搭。以下是Google和Hadley Wickham的一些示例样式指南。
如果您将read.table
与sep=','
和header=TRUE
一起使用,则可以改为拨打read.csv
。
尽可能尝试将内容放在函数中而不是使用一个长脚本。这可以帮助使代码更具可读性,作为奖励,您最终可能会重复使用一些代码,以便以后进行分析。在这种情况下,我很想将创建绘图的所有代码移动到一个函数中(可能使用子函数初始化绘图和绘制零件)。
R Inferno包含很多关于良好R编程实践的想法。