Передача замещающего знака к другой функции variadic [дубликат]

Из документации MATLAB boxplot :

В каждом блоке центральная отметка указывает медиану, а нижний и верхний края блока указывают 25-й и 75 процентиль соответственно. Усы распространяются на самые крайние точки данных, которые не считаются выбросами , а выбросы наносятся на график индивидуально с использованием символа «+».

blockquote>

Вы, вероятно, хотите проверить вычисление выброса.

Под необязательным входом 'Whisker' (по умолчанию 1.5) вы можете увидеть это объяснение:

boxplot рисует точки как выбросы, если они больше q3 + w × (q3 – q1) или меньше [115 ], где w - максимальная длина вискера, а q1 и q3 - 25-й и 75-й процентили данных выборки, соответственно.

blockquote>

Если вы установите опцию 'Whisker' на 0.7, вы получите тот же график, что и в вашем коде R:

boxplot(df(:, 1:end-1), 'Whisker', 0.7);

boxplot

Эквивалентным входом для R boxplot является range ( docs ):

Диапазон: это определяет, как далеко простираются усы сюжета. из коробки. Если диапазон положительный, усы распространяются на самую крайнюю точку данных, которая не превышает диапазон, превышающий межквартильный диапазон от прямоугольника . Нулевое значение заставляет усы расширяться до крайностей данных.

blockquote>

Похоже, это то же самое определение, как показано выше из документов MATLAB - пожалуйста, обратитесь к ответу Ходжо , чтобы немного подробнее узнать о вычислении IQR.

68
задан Tim Post 23 January 2013 в 16:41
поделиться

3 ответа

Вы не можете, можно только передать аргументы как a va_list. Посмотрите comp.lang.c FAQ.

В целом, если Вы пишете функции variadic (то есть, функции, которые берут переменное количество аргументов) в C, необходимо записать две версии каждой функции: тот, который берет замещающий знак (...), и тот, который берет a va_list. Версия, берущая замещающий знак, должна звонить va_start, назовите версию, берущую a va_list, звонить va_end, и возвратитесь. Нет никакой потребности в дублировании кода между двумя версиями функции, так как каждый называет другой.

69
ответ дан Adam Rosenfield 24 November 2019 в 14:21
поделиться

Вероятно, можно использовать variadic макросы - как это:

#define FOO(...)  do { do_some_checks; myfun(__VA_ARGS__); } while (0)

NB! Макросы Variadic C99-только

10
ответ дан qrdl 24 November 2019 в 14:21
поделиться

Необходимо передать va_list помощнику.

0
ответ дан Andrew Grant 24 November 2019 в 14:21
поделиться
Другие вопросы по тегам:

Похожие вопросы: