Отображение логарифмической шкалы в R

Я пытаюсь построить логарифмическую шкалу, но я продолжаю получать эту ошибку:

Error in plot.window(...) : invalid "log=1/h" specification. 

Я не уверен, что я делаю неправильно. Ниже мой код:

   #function
function(stepsize, temp_val, counter) {
  while(counter < 0) {
    counter <- counter + stepsize
    px_norm <- dnorm(counter, mean = 0, sd = .04)
    temp_val <- temp_val + px_norm }
  temp_val <- 2*temp_val
  temp_val <- temp_val *(stepsize/2)
  print(temp_val, digits = 12)
}

#Initial step size
h <- .01 
while (h > .00001) {
  x <- calc_error(h, 0, -5) #Gives me a result around .5
  err <- x - (exp(-.02)*0.5)
  plot(1/h, err, log = "1/h")
  h <- h/10 }

По сути, в этой короткой функции, которую я пытаюсь показать, по мере увеличения размера шага ошибка реального ответа будет уменьшаться. Тем не менее, у меня возникли проблемы с составлением плана. Любая помощь будет оценена. Спасибо


person Josh    schedule 23.09.2012    source источник
comment
Это не воспроизводимый пример. # используется для комментариев в R, а не //. Что такое calc_error? у нас нет такой функции.   -  person Maiasaura    schedule 23.09.2012
comment
Эта функция работает хорошо, она дает результат около 0,5. у меня просто проблемы с графикой   -  person Josh    schedule 23.09.2012
comment
мы понятия не имеем, что это за функция. Мы не можем читать ваши мысли. без calc_error мы не можем генерировать данные для построения чего-либо. Кроме того, нет смысла строить каждую точку внутри цикла.   -  person Maiasaura    schedule 23.09.2012
comment
@ Джош, функция может работать хорошо, но у нас нет функции calc_error. Вам нужно будет предоставить код для этой функции, если она написана вами, или пакет, в котором ее можно найти. В противном случае мы не сможем воспроизвести ваш код.   -  person user1317221_G    schedule 23.09.2012


Ответы (3)


Это должен быть простой способ создать сюжет:

h <- 10^-seq(2, 4)
err <- lapply(h, function(x) calc_error(x, 0, -5) - (exp(-.02) * .5))
plot(1/h, err, log = "x")

введите здесь описание изображения

person Sven Hohenstein    schedule 23.09.2012
comment
Эй, спасибо за пост. Я искал в Интернете функцию lapply, но я немного запутался в том, как она работает и когда вы будете ее использовать. Кроме того, в вызове lapply(h, function(x), calc_error(x, 0, -5) - [...] почему вы используете x, а не h, так как мы меняем значения x, или это что-то как передать по значению - person Josh; 23.09.2012
comment
Функция применяется ко всем значениям вектора h. Одно значение обозначено x, так как я определил функцию как функцию x (function(x)). По сути, h — это целое, но функция применяется к каждому элементу отдельно. - person Sven Hohenstein; 23.09.2012
comment
Кроме того, когда я использую функцию lapply, она показывает мне расчет на каждом этапе, можно ли это как-то скрыть? - person Josh; 23.09.2012
comment
@Josh Это связано с командой print в вашей функции. Просто удалите строку print(temp_val, digits = 12) и вы не увидите вывод. - person Sven Hohenstein; 23.09.2012
comment
Есть ли команда, которая позволяет мне редактировать функцию? Например, редактировать или что-то в этом роде? Проблема в том, что у меня действительно странная версия R в Ubuntu, и я использую терминал для доступа к ней (набрав R). Я не знаю, как я могу получить доступ к уже созданным функциям, поэтому мне приходится создавать новые. - person Josh; 23.09.2012
comment
Если вам не нравится командная строка, я бы порекомендовал взглянуть на RStudio ( rstudio.org ), который представляет собой приятный графический интерфейс, доступный на всех основных платформах. - person Ben Bolker; 24.09.2012

plot(1/h, err, log = "1/h")

log должен быть осью вашего графика, который вы хотите в пространстве журнала, а не фактическими данными.

i.e.

plot(1/h, err, log = "x")

отобразит вашу ось x в пространстве журнала

person AGS    schedule 23.09.2012
comment
Привет, кажется, я не вижу логарифмический график, на оси x есть только прямая линия, но ось x увеличивается от 100 до 100000 - person Josh; 23.09.2012
comment
@Josh Похоже, вы наблюдаете логарифмический график, но сделали неправильный выбор для своей шкалы Y. Но, как и в случае с проблемой calc_error, я не уверен, как вы ожидаете, что мы поможем, не имея перед нами ваших данных. - person joran; 23.09.2012

Я думаю, вы хотите что-то вроде этого:

i <- 1
h <- 0.01
err <- vector(0,mode="numeric")

while (h[i] > .00001) {
  x <- rnorm(1,mean=0.5,sd=0.05) #use calc_error instead
  err <- c(err,x - (exp(-.02)*0.5))
  i <- i+1
  h <- c(h,h[i-1]/10) }

plot(1/h[-length(h)],err,log="x")
person Roland    schedule 23.09.2012
comment
Код Свена, конечно, лучше (или, по крайней мере, больше в духе R), но вы, вероятно, лучше знакомы с циклом while. - person Roland; 23.09.2012