2015-01-03 2 views
1

Как работает следующий код? Я получил пример, когда читал справочную строку R ?curve. Но я этого не понял.Как работает функция кривой в R? - Пример функции кривой

for(ll in c("", "x", "y", "xy")) 
    curve(log(1+x), 1, 100, log = ll, 
     sub = paste("log= '", ll, "'", sep = "")) 

В частности, я привык к числовым значениям в качестве аргументов внутри for-loop как,

for(ll in 1:10) 

Но что следующая команда говоря:

for(ll in c("","x","y","xy")) 

c("","x","y","xy") выглядит как вектор строк ? Как c("","x","y","xy") работать внутри curve функция как log(1+x) [что такое x здесь? строка "x"? в c("","x","y","xy")] и log=ll?

+3

Кривая 'log (1 + x)' не влияет непосредственно на цикл. Как вы видите, 'll' выполняет итерацию через вектор символа' c ("", "x", "y", "xy") 'и подается в параметр' log' внутри 'curve'. Описание параметра: 'Значение log используется как для указания осей графика (если только add = TRUE), а как интерпретируется« равноотстоящий »: если х-компонент указывает масштабирование по логарифму, точки, в которых выражение или функция накладывается равномерно на шкалу журнала. 'Так что, если вы определяете, например,' log = "x", это означает, что ваша ось x будет отображаться логарифмически. –

+0

Короткий ответ заключается в том, что параметр 'll' ia передается только формальным аргументам в' curve', которые «ожидают» (или более точно определяются как принимающие) значения символов. –

+0

'для (буквы в c (" a "," b "," c ")) print (letter)' – Gregor

ответ

2

По-видимому, нет никаких ответов на переполнение стека о том, как curve функция R работает и особенно о log аргумента, так что это может быть хороший шанс проникнуть в него немного больше (мне понравился вопрос кстати):

Прежде всего легкой части:

c("","x","y","xy") является строка вектор или более формально векторный характер.

for(ll in c("","x","y","xy")) начнет цикл из 4 итераций, и каждый раз ll будет '','x','y','xy' соответственно. К сожалению, так, как этот пример построен, вы увидите только последний, построенный для ll = 'xy'. погружение

Давайте в исходный код функции curve ответить на остальные:

  • Прежде всего, что делает x представляют в log(1+x)?

log(1+x) - это функция. x представляет собой вектор чисел, который будет создаваться внутри функции curve в следующей части (от исходного кода):

x <- exp(seq.int(log(from), log(to), length.out = n)) #if the log argument is 'x' or 
x <- seq.int(from, to, length.out = n)    #if the log argument is not 'x' 
#in our case from and to are 1 and 100 respectively 

Пока n аргумент по умолчанию, который x вектор содержит 101 элементов. Очевидно, что x в log(1+x) полностью отличается от «x» в аргументе log.

за y он всегда создается как (из исходного кода):

y <- eval(expr, envir = ll, enclos = parent.frame()) #where expr is in this case log(1+x), the others are not important to analyse now. 
#i.e. you get a y value for each x value on the x vector which was calculated just previously 
  • Во-вторых, какова цель log аргумента?

log аргумент определяет, какой из x или y осей будет регистрироваться.Ось х, если 'x' является аргументом log, ось у, если 'y' является аргументом log, как ось, если 'xy' является аргументом log и нет лог-шкалы, если log аргумент ''.

Необходимо отметить здесь, что логарифм х или у оси вычисляется в plot функции в функции curve, то есть функция curve только обертка для функции plot.

Сказанное выше, поэтому, если аргумент log равен «x» (см. Выше), экспоненциальная величина значений логарифма вектора x рассчитывается так, чтобы они возвращались к зарегистрированным в функции plot.

P.S. исходный код для функции curve можно увидеть с помощью ввода graphics::curve на консоли.

Надеюсь, теперь это будет иметь смысл!

+0

Nice summary! (+1) –

+0

@docendodiscimus Спасибо большое :)! – LyzandeR