Понимание синтаксиса R в этом примере

Понимание синтаксиса R в этом примере

01.02.2015 02:53:51 Просмотров 49 Источник

Поиск пика в наборе данных-с помощью R

Привет

Я видел эту тему на stackexchange. Я не программист R (пока). Но я хотел бы реализовать в C. Но, не будучи знакомым с синтаксисом R, я не могу понять код. Я знаю, что он создает массивы, такие как y.max и i.max, но я не уверен, что операции выполнены и как он манипулирует массивами. Вот четыре строки, которые меня особенно интересуют.

  y.max <- rollapply(zoo(y.smooth), 2*w+1, max, align="center")
  delta <- y.max - y.smooth[-c(1:w, n+1-1:w)]
  i.max <- which(delta <= 0) + w
  list(x=x[i.max], i=i.max, y.hat=y.smooth)

Некоторые указатели на понимание этого конкретного синтаксиса будут полезны.

У вопроса есть решение - Посмотреть?

Ответы - Понимание синтаксиса R в этом примере / Understanding R syntax in this example

Является ответом!
Sean Hughes

01.02.2015 03:24:39

Вот перевод этого кода. R часто использует вложенные вызовы функций, которые трудно понять, если вы не знаете, что делает каждая функция. Чтобы помочь с этим, я разделил некоторые строки на несколько строк и сохранил результаты в новых переменных.

# convert y.smooth to a zoo (time series) object
zoo_y.smooth <- zoo(y.smooth)

# divide the data into rolling windows of width 2*w+1
# get the max of each window
# align = "center" makes the indices of y.max be aligned to the center
# of the windows
y.max <- rollapply(zoo_y.smooth, 
                   width = 2*w+1, 
                   FUN = max, 
                   align="center")

Подмножество R может быть очень кратким. c(1:w, n+1-1:w)создает вектор чисел, называемый toExclude. Передача этого вектора с оператором -to []выбирает все элементы y.smooth, за исключением тех, которые находятся в индексах, указанных в toExclude. Опуская -сделал бы наоборот.

# select all of the elements of y.smooth except 1 to w and n+1-1 to w
toExclude <- c(1:w, n+1-1:w)
subset_y.smooth <- y.smooth[-toExclude]

# element-wise subtraction
delta <- y.max - subset_y.smooth

# logical vector the same length of delta indicating which elements
# are less than or equal to 0
nonPositiveDelta <- delta <= 0

Таким nonPositiveDelta, nonPositiveDelta-это вектор, подобный TRUE FALSE FALSE... с элементом для каждого элемента дельты, указывая, какие элементы дельты являются неположительными.

# vector containing the index of each element of delta that's <= 0
indicesOfNonPositiveDeltas <- which(nonPositiveDelta)

indicesOfNonPositiveDeltas, с другой стороны, является вектором типа 1, 3, 4, 5, 8, содержащим индекс каждого элемента предыдущего вектора, который был истинным.

# indices plus w
i.max <- indicesOfNonPositiveDeltas + w

Наконец, результаты сохраняются в списке. Список-это своего рода массив массивов, где каждый элемент списка может сам быть другим списком или любым другим типом. В этом случае каждый элемент списка является вектором.

# create a three element list 
# each element is named, with the name to the left of the equal sign
list(
  x=x[i.max], # the elements of x at indices specified by i.max
  i=i.max, # the indices of i.max
  y.hat=y.smooth) # the y.smooth data

Не видя остальной части кода или описания того, что он должен делать, мне пришлось немного догадаться, но, надеюсь, это поможет вам.

https://stackoverflow.com/questions/28257929/understanding-r-syntax-in-this-example/28258117#comment44874511_28258117
спасибо за подробное объяснение. Полный поток указан в списке stats.stackexchange.com/questions/36309/…
https://stackoverflow.com/questions/28257929/understanding-r-syntax-in-this-example/28258117#comment44874777_28258117
Обратите внимание, что align = "center" является значением по умолчанию для rollapplyпоэтому этот аргумент может быть опущен.
Закрыть X