2011-03-15 3 views
4

나는 MySQL 데이터베이스에서 데이터를 가져와 처리하고, 여러 차트와 그래프를 만들고, 그래프를 파일에 인쇄하고, 파일 이름을 문자열로 반환하는 R 스크립트를 가지고 있습니다. 이전 서버 (R2.10.1을 실행하는 Solaris 10 (32 비트))에서 제대로 작동했지만 이제 새로운 서버 (R 2.12.1을 실행하는 Centos (64 비트))에서 오류가 발생합니다.이전 스크립트, 새 서버, 예기치 않은 오류

전 스크립트를 꽤 오래 게시 할 것이므로 대부분 스크립트를 게시하지 않을 것입니다. 여전히 데이터베이스에 액세스하고 데이터를 처리하며 차트와 그래프를 작성하고 파일에 인쇄합니다. 파일 이름을 반환하지 않습니다.

Error in save(exp, meta, MDist.median, redgrad.pal, colgrad.pal, phase_starts, : 
    object âx.gcâ not found 
Function brew returned an object of 'try-error'. 

아래는 스크립트의 비트입니다 :

<% 
Sys.umask(mode="0022") 
fn=tempfile('z_') 
fn.prof<-paste(fn,'prof',sep='.') 
fn.data<-paste(fn,'txt',sep='.') 
fn.r<-paste(fn,'rda',sep='.') 
fn.graph=paste(fn,'pdf',sep='.') 

library(Cairo) 
library(rjson) 
library(DBI) 
library(RMySQL) 
library(reshape) 
library(plyr) 
library('RColorBrewer') 
library(ggplot2) 
library(lattice) 
library(latticeExtra) 
library(hexbin) 


exp_id<-ifelse(is.null(POST$exp_id),0,as.numeric(POST$exp_id)) 
group_id<-ifelse(is.null(POST$groupset_id),0,as.numeric(POST$groupset_id)) 
saveR<-ifelse(is.null(POST$saveR),FALSE,as.logical(POST$saveR)) 
control<-ifelse(is.null(POST$control),'rowH',as.character(POST$control)) 

#open connection to db 
#process data 
#format 

#output 

pdf(fn.graph,title=meta$exp_name) 
dummy <- capture.output(print(plist)) #expensive: 3.56s 
print(dists.med.areaplot) #expensive: 5.67s 
print(dists.med.lplot) 
dev.off() 

####HERE IS PROBLEM#### 
save(exp, meta, MDist.median, 
     redgrad.pal, colgrad.pal, 
     phase_starts, voi, plist, 
     grect, nogrid, dists.med.areaplot, dists.med.lplot,x.gc, file=fn.r) 


#return filenames to calling script 
cat(toJSON(list('filename'=fn.data, 'graph_pdf'=fn.graph,'rfile'=fn.r))) 
%> 

생각이 오류인가?

ETA는 :

그것은 기존 서버에서 다른되는 새 서버의 로케일 설정으로 요약된다. 오류 메시지는 다음과 같아야합니다 : object "x.gc" not found. 나는 그 기분을 상하게하는 물건을 발견하고 그것에 엄하게 말했다. 문제가 해결되었습니다. (읽을 수있는 오류 메시지가 정말 도움이됩니다!)

+2

새로운 환경에서 기본 로케일 ('Sys.getlocale()'참조)이 다른지 확인 했습니까? – daroczig

+0

@daroczig : 흥미 롭습니다. 낡은 로케일은'C'입니다. 새 로케일은 다음과 같습니다.> Sys.getlocale() [1] "LC_CTYPE = en_US.UTF-8; LC_NUMERIC = C; LC_TIME = en_US.UTF-8; LC_COLLATE = en_US.UTF-8; LC_MONETARY = C; LC_MESSAGES = en_US LC_ADDRESS = C; LC_TELEPHONE = C; LC_MEASUREMENT = en_US.UTF-8; LC_IDENTIFICATION = C "' – dnagirl

+1

LOCALE이 'object "x.gc"not found "를 읽어야하는 에러 메시지. x.gc가 만들어지지 않은 곳을 찾았습니다. 이제는 모두 잘되었습니다. – dnagirl

답변

0

원래의 포스터가 질문에 답변했습니다. 이 질문은 답변으로 표시 될 수 있습니다.

관련 문제