2010-12-10 2 views
3

Теперь я делаю это так:Как перемасштабировать матрицу точек?

d = approx(density(csvdata[,'X'],n=5000),xout=csvdata[,'X']) 
dfact = 40/max(d$y) 
for(i in 1:nrow(csvdata)) { 
    d$y[i] = (d$y[i]*dfact)-20 
} 

Что я делаю здесь перемасштабировании функции плотности, которая всегда быть выше 0, которое будет отображаться под из нижней части моего графика, которая при -20 и всегда подходит к вершине, которая находится на +20, поэтому я более легко обнаруживаю любые неровности линии. Теперь, как вы можете видеть, я делаю это, зацикливая, но, может быть, в нем есть несколько построек?

ответ

3

y - это вектор, а * и - - векторизованные функции, поэтому вам не нужно зацикливать вектор чисел, выполняющих вычисления по одному. Просто сделайте их все сразу:

d$y <- (d$y * dfact) - 20 

или лучше (не d$),

d <- within(d, y <- (y * dfact) - 20) 

dfact является скаляром (длина 1 вектор в R, поскольку он не имеет отдельного понятия скалярного), но R будет расширяться. dfact (recycle - правильная терминология в R) до необходимой длины, чтобы вышеупомянутые вычисления могли выполняться как обычно.