Is the problem my function or the dataset I'm trying to use?

Viewed 39

I'm new to Julia programming, so researching for my thesis I found the following code, but I can't seem to grasp what the error is. The function main is supposed to take a dataset and then plot some results, but when I try to call the function into action:

info = readdlm("DataSet.txt")

By the way, DataSet is a:

30×6 Array{Float64,2}

Then, when I call the function:

mymain(info,5)

It returns the following:

MethodError: no method matching readdlm_auto(::Array{Float64,2}, ::Char, ::Type{Float64}, ::Char, ::Bool)
Closest candidates are:
readdlm_auto(!Matched::Array{UInt8,1}, ::AbstractChar, ::Type, ::AbstractChar, ::Bool;  ...) 

I've tried to modify my data, but I don't understand where is the error. The whole function is as follows:

function mymain(filename,nsamples)
start_time=time()

M=readdlm(filename)
ts,A=M[:,1],M[:,2:end]
(nsweeps,N)=size(A)

dx=0.01;
x=[minimum(collect(A)):dx:maximum(collect(A))];
bx=[x-dx/2,x[end]+dx/2];
(bx,hA)=hist(A[:],bx);

f1=figure()
subplot(2,1,1); plot(ts,A,"-o"); xlabel("Time [ms]"); ylabel("Amps 
[mV]");

subplot(2,1,2); plot(x,hA,"-");  xlabel("Amps [mV]"); 
ylabel("Density");draw()

nparams=8             

Sx=Array(ASCIIString,1,nparams)     
Rx=zeros(2,nparams)         
nx=zeros(Int,1,nparams)         

Sx[1,1]="p";        Rx[1:2,1]=[0.02,0.98];      nx[1]=49
Sx[1,2]="n";        Rx[1:2,2]=[1,20];       nx[2]=20        
Sx[1,3]="tD";       Rx[1:2,3]=[50,200];         nx[3]=46
Sx[1,4]="a";        Rx[1:2,4]=[0.05,0.5];       nx[4]=46
Sx[1,5]="siga";     Rx[1:2,5]=[0.01,0.2];       nx[5]=39
Sx[1,6]="sigb";     Rx[1:2,6]=[0.01,0.1];       nx[6]=19
Sx[1,7]="tauf";     Rx[1:2,7]=[50,200];     nx[7]=46
Sx[1,8]="u1";       Rx[1:2,8]=Rx[1:2,1];        nx[8]=nx[1] 

x=zeros(maximum(nx),nparams)
p=zeros(maximum(nx),nparams)
dx=zeros(1,nparams)

for j=1:nparams
x[1:nx[j],j]=linspace(Rx[1,j],Rx[2,j],nx[j])'
dx[j]=x[2,j]-x[1,j]
end

S=zeros(Int,nsamples,nparams)      

sold=zeros(Int,1,nparams)
for j=1:nparams
sold[j]=rand(1:nx[j])
end

while x[sold[4],4]<=x[sold[5],5]    
sold[4]=rand(1:nx[4])
sold[5]=rand(1:nx[5])
end

while x[sold[8],8]<=x[sold[1],1]    
sold[1]=rand(1:nx[1])
sold[8]=rand(1:nx[8])
end

xold=zeros(1,nparams)
xnew=zeros(1,nparams)
for j=1:nparams
xold[j]=x[sold[j],j]
end
llold=myloglikelihood(xold,ts,A)    

for k=1:nsamples

snew=sold+rand(-1:1,1,nparams)   

if all(ones(1,nparams).<=snew.<=nx)            

allowed2=x[snew[4],4]>x[snew[5],5]        
allowed3=x[snew[8],8]>x[snew[1],1]         

if allowed2&allowed3

for j=1:nparams
xnew[j]=x[snew[j],j]
end

llnew=myloglikelihood(xnew,ts,A)     

if rand()<exp(llnew-llold)       
sold,llold=snew,llnew
end

end
end

S[k,:]=sold

end
for k=1:nsamples
for j=1:nparams
p[S[k,j],j]+=1/(nsamples*dx[j])
end
end 

f2=figure()
for j=1:nparams
subplot(2,4,j)
plot(x[1:nx[j],j],p[1:nx[j],j]);
xlabel(Sx[j])
end

diff_time=time()-start_time;
println("Total runtime 
",round(diff_time,3),"s=",round(diff_time/60,1),"mins." );

return S

end    

Perhaps this a very rookie mistake, but I have searched within the manuals but even so, I'm not being able to grasp the whole of it. Any help would be much appreciated.

1 Answers

This question was answered on the Julia Discourse here - please make it clear when cross posting to different forums.

In short, the answer was that

info = readdlm("DataSet.txt")

binds the data itself (rather than the name of the file) to the variable info, so then doing

mymain(info, 5)

doesn't work as mymain expects the file name rather than the actual data set as input.

Related