2015-02-06 2 views
0

Я читаю список файлов filestoplot.txt и загружаю их в массив (datasets[fileno]). Эти 2-D массивы схожи по структуре, и я хотел рассчитать max и min каждого столбца (всех объединенных массивов), чтобы я мог правильно установить глобальную ось d3. Однако мой код (показано ниже) неверно возвращает gloablmax и gloablmin.Вычислить домен данных

var files=[]; 
var datasets=[],totalfiles; 
var i,j,dset=1,olddset=0,maxscale=0; 
var maxnecr=0; 
var cols=8; 
var maxvalues=[]; 
var globalmin=[];gloablmax=[]; 

//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 
function loadfilenames(){ 

d3.csv("./filestoplot.txt", 
function(file){ 
    files = file.map(function(d) { for (key in d) { fn=d[key]; } return fn; }) 
    totalfiles=files.length; 
    for (i=0;i<totalfiles;i++){ 
     datasets[i]=[]; 
     loaddataset(i); 
     maxvalues[i]=[]; 
    } 
    if (filesloaded==(totalfiles-1)) maxmin(); 
} 
); 
} 
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 
function loaddataset(fileno){ 
d3.csv(files[fileno],function(a){ 
    console.log("loading file "+filesloaded);filesloaded++; 
    datasets[fileno]=a.map(function(d1) { 
    return [ 
    +d1["f1"] , 
    +d1["f2"] , 
    +d1["f3"] , 
    +d1["f4"] , 
    +d1["f5"] , 
    +d1["f6"] , 
    +d1["f3"]/(+d1["f3"] + +d1["f5"]), 
    +d1["f7"] 
    ]; 
} 
); 
} 
); 
} 
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 
function maxmin(){ 
for (j=0; j <cols; j++) { 
    globalmin[j]=Math.Min.apply(null,d3.extent(maxvalues,function(d){ return d[j][0]; })) 
    gloablmax[j]=Math.Max.apply(null,d3.extent(maxvalues,function(d){ return d[j][1]; })) 
    //d3.extent(maxvalues,function(d){ console.log(d[j]);}); 
} 
} 

//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 

</script> 

<body style="max-width:90%" onload="loadfilenames();"> 
<script> 

function changedataset(el){ 
    console.log(el.checked) 
    maxmin(); 
} 
</script> 
</body> 

На хромированной консоли, я могу видеть, что maxvalues ​​имеет правильные данные, однако максиминными показывает эту ошибку:

"Uncaught TypeError: Не удается прочитать свойство 'применить' неопределенных"

I было бы полезно для любых указателей. Благодарю.

ответ

2

Применить используется только дважды,

Math.Min.apply 
Math.Max.apply 

Если применить это «свойство не определено», это означает Math.min и/или Math.max не определено.

Похоже, что у вас есть проблема с капитализацией, попробуйте Math.min и Math.max (конечно, могут быть и другие проблемы, но это должно быть источником TypeError).

+0

Вы правы. Просто заменив его на 'Math.max', а' Math.min' решил это. Я просто не понимал, что я его капитализировал. – user3259040

+0

Другой вопрос: когда было бы удобно называть maxmin() автоматически. Я помещал его в файл changeataset только как хак, но хотел бы назвать его, как только все данные будут загружены. добавляя его после цикла 'for (i = 0; i user3259040

+0

Когда вы говорите после цикла for, вы имеете в виду в обратном вызове d3.csv (* right * после цикла for) или вне его? Если он находится вне обратного вызова, это означает, что он, вероятно, будет вызван до цикла for, даже если он находится ниже этого кода. –

Смежные вопросы