Составьте несколько функций в R - PullRequest
3 голосов
/ 03 февраля 2010

Ранее я задавал этот вопрос , который был полезен при построении функции.Я хочу попробовать построить двадцать функций на одной оси, чтобы проиллюстрировать, как функция изменяется между двумя диапазонами.Я успешно сделал это, используя индивидуально определенные функции, но я хотел сделать это с помощью цикла.

Я пытался сделать следующее:

## 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() 

Любые предложения по улучшению синтаксиса или программированиюструктура будет оценена.Спасибо.

Ответы [ 2 ]

3 голосов
/ 03 февраля 2010

Есть приятная функция file.path, которая позволяет создавать пути к файлам независимо от ОС. Вы можете использовать его в своем коде как:

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))

Ваш путь «зависит от окон» (ссылка на метку диска), но если вы используете пути родственников, это может быть более полезным.

И второй совет - вы должны открыть графическое устройство как можно позже, например,

pdf(file.path(pdfOutPath, pdfOutFile),height=6,width=9)
print(p + composite)  
dev.off()

Тогда проще искать правильную линию, если вы хотите увидеть график в окне, а не в файле.

1 голос
/ 08 февраля 2010

Будьте в соответствии с вашим стилем. Например, всегда используйте <- или всегда используйте =; не смешивать и сочетать. Вот несколько примеров стилей из Google и Hadley Wickham .

Если вы используете read.table с sep=',' и header=TRUE, вы можете вместо этого позвонить read.csv.

Везде, где возможно, старайтесь помещать вещи в функции, а не иметь один длинный скрипт. Это может помочь сделать код более читабельным, и в качестве бонуса вы можете получить биты кода, которые вы сможете использовать повторно для последующего анализа. В этом случае у меня возникнет соблазн переместить весь код, который создает график, в функцию (возможно, с подфункциями для инициализации графика и для выполнения рисования).

R Inferno содержит множество идей о хорошей практике программирования R.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...