2013-07-30 5 views
1

Я думаю, что я мог бы это навлечь на уме. У меня есть файл, который я хочу использовать, чтобы сделать barplot в R. Файл выглядит следующим образом:Vector from with read.table R

## metadata 
# filepath 
## filename 
# Started on: Tue Jul 30 10:46:57 EDT 2013 


#HISTOGRAM java.lang.Integer 
READ: 1 2 
-1 28 28 
0 27 29 

Я хочу сделать гистограмму данных у меня есть. Я думал, что это будет выглядеть примерно так:

| 
    | 
# |    | 
    | |   | 
    | |  | | 
    |__|_____|____|___|____ 
    -1(1) -1(2) 0(1) 0(2) 

Но у меня проблемы с чтением данных. Это мой код:

# Parse the arguments 
args <- commandArgs(trailing=T) 
#Chart file 
metricsFile <- args[1] 
#pdf file path and name that I want to produce 
outputFile <- args[2] 

# Figure out where the firstLine and the chart are in the file and parse them out 
startFinder <- scan(metricsFile, what="character", sep="\n", quiet=TRUE, blank.lines.skip=FALSE) 
firstBlankLine=0 
#finds empty strings 
for (i in 1:length(startFinder)) 
{ 
     if (startFinder[i] == "") { 
       if (firstBlankLine==0) { 
         firstBlankLine=i+1 
       } else { 
         secondBlankLine=i+1 
         break 
       } 
     } 
} 

#I accept some args and I read past some header information 
firstLine <- read.table(metricsFile, header=T, nrows=1, sep="\t", skip=firstBlankLine) 
#prints "firstLine: -1" "firstLine: 28" "firstLine: 28" 
secondLine <- read.table(metricsFile, header=T, nrows=1, sep="\t", skip=secondBlankLine) 
#prints "secondLine: -1" "secondLine: 27" "secondLine: 29" 

# Then plot as a PDF 
pdf(outputFile) 
#I am just inputing firstLine here because I was trying to see how it works 
#I get the error:'height' must be a vector or a matrix 
barplot(firstLine, 
     main=paste("Read",(i-1)," Distribution ", 
     xlab="Counts", 
     ylab="F/R Orientation") 

dev.off() 

Как я заметил в моем коде я получаю ошибку, что «высота» должен быть вектор или матрица. Я не знаю R достаточно хорошо, чтобы знать, как читать его как вектор, а не как я сейчас это делаю. Я также не уверен, может быть, проблема в том, что я использую barplot. Может быть, лучше использовать только «сюжет»? Возможно, я неправильно использую read.table?

+0

Вы можете сделать свой пример [воспроизводимым] (http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example). В противном случае отладка будет невозможна. Включите точный входной файл или его часть, а также все дополнительные переменные, которые вы используете ... вы также можете включить 'dput (firstLine)', что очень поможет. – Justin

ответ

1

Вы можете использовать ?unlist "конвертировать" свой data.frame в числовой вектор:

d <- read.table(file="YOURFILE", sep="\t", header=TRUE, row.names=1) 
barplot(unlist(d)) 

enter image description here

Может быть, вы должны настроить ярлыки.

BTW: Вы можете избежать части firstline и secondline. read.table пропустит комментарии (строки, начинающиеся с #), и пустые строки автоматически (см. ?read.table).

+0

Большое спасибо. Это действительно упростило мой код. Я не видел, чтобы читаемый текст пропускал комментарии и пробелы. – Stephopolis