Функция рассчитывает разницу между всеми последовательными значениями вектора. Для вашего примера вектора различия следующие:
1 - 10 = -9
1 - 1 = 0
1 - 1 = 0
.
.
.
3 - 1 = 2
10 - 3 = 7
Аргумент differences
позволяет указать порядок различий.
Например, команда
diff(temp, differences = 2)
[1] 9 0 0 0 0 1 -2 1 0 0 0 0 0 2 5
дает тот же результат, что и
diff(diff(temp))
[1] 9 0 0 0 0 1 -2 1 0 0 0 0 0 2 5
Следовательно, она возвращает различия разностей.
Аргумент lag
позволяет указать задержку.
Например, если lag = 2
, вычисляются различия между третьим и первым значением, между четвертым и вторым значением, между пятым и третьим значением и т. Д.
diff(temp, lag = 2)
[1] -9 0 0 0 0 1 0 -1 0 0 0 0 0 2 9
В Objective-C 2.0 появилась директива протокола @optional, позволяющая объявлять определенные методы протокола необязательными. До Obj-C 2.0 категории использовались, чтобы разрешить необязательные методы делегирования (в частности, категории в NSObject, которые называются неформальными протоколами ).
Я предполагаю, что большинство категорий вместо -протокол в iPhone SDK унаследован от эквивалентных классов Mac. Например, NSURLConnection
существует как в Mac, так и в iPhone SDK, поэтому код, скорее всего, используется совместно. Поскольку Apple еще не смогла изменить все классы Mac для использования формальных протоколов, остается некоторая несогласованность.
That's a legacy came from objective-c 1.0, which has no "optional protocol method".
До версии Objective-C, которая была выпущена с OS X 10.5 и iPhone SDK под названием «Objective-C 2.0», можно было создавать дополнительные протоколы только с использованием категорий. В Objective-C 2.0 новое ключевое слово @optional было добавлено в протоколы, чтобы отмечать, какие методы являются необязательными (оставшаяся часть неявно требуется).
Так что я думаю, что вы видите небольшое отступление от предыдущих дней до @optional keyword.
Изменить: чтобы ответить на последующие действия, которые появились в исходном вопросе: Мотивация для использования категории в NSObject / id для неформального протокола частично состоит в том, чтобы задокументировать и сгруппировать, какие методы объект может вызывать в своем источник данных (или делегат, или что-то еще), и в меньшей степени, чтобы избежать предупреждений компилятора о том, что вы вызываете методы, которые компилятор не выполняет t know будет присутствовать в объекте, который получает вызов. Представьте, что вы реализуете класс, который вызывает эти методы источника данных - вы, вероятно, захотите проверить, присутствует ли метод, используя [obj responsedsToSelector: @selector (my: datasource: method :)] всякий раз, когда вы заинтересованы в вызове метода my : datasource: method: метод объекта obj.