exponenta event banner

varfun

Применение функции к переменным таблицы или расписания

Описание

пример

B = varfun(func,A) применяет функцию func отдельно от каждой переменной таблицы или расписания A и возвращает результаты в таблице или расписании B.

Функция func должен принимать один входной аргумент и возвращать массивы с одинаковым количеством строк при каждом вызове. i-я переменная в выходном аргументе, B{:,i}, равно func(A{:,i}).

Если A является расписанием и func агрегирует данные по группам строк, затем varfun назначает время первой строки из каждой группы строк в A как соответствующее время строки в B. Возвратиться B в виде таблицы без времени строки, укажите 'OutputFormat' как 'table'.

пример

B = varfun(func,A,Name,Value) применяет функцию func отдельно от каждой переменной таблицы или расписания A с дополнительными опциями, указанными одним или несколькими Name,Value аргументы пары.

Например, можно указать переменные для передачи функции.

Примеры

свернуть все

Определите и примените функцию на основе элементов к переменным таблицы для возведения всех элементов в квадрат.

Определите таблицу, содержащую числовые переменные.

A = table([0.71;-2.05;-0.35;-0.82;1.57],[0.23;0.12;-0.18;0.23;0.41])
A=5×2 table
    Var1     Var2 
    _____    _____

     0.71     0.23
    -2.05     0.12
    -0.35    -0.18
    -0.82     0.23
     1.57     0.41

Определите анонимную функцию для поиска квадрата ввода.

func = @(x) x.^2;

Применить функцию ко всем переменным таблицы A.

B = varfun(func,A)
B=5×2 table
    Fun_Var1    Fun_Var2
    ________    ________

     0.5041      0.0529 
     4.2025      0.0144 
     0.1225      0.0324 
     0.6724      0.0529 
     2.4649      0.1681 

Переменные B имеют имена, основанные на имени функции и переменной из A.

Вычислите среднее значение каждой переменной в таблице 5 на 2.

Определите таблицу, содержащую числовые переменные.

A = table([0.71;-2.05;-0.35;-0.82;1.57],[0.23;0.12;-0.18;0.23;0.41])
A=5×2 table
    Var1     Var2 
    _____    _____

     0.71     0.23
    -2.05     0.12
    -0.35    -0.18
    -0.82     0.23
     1.57     0.41

Определите анонимную функцию для поиска среднего значения ввода.

func = @mean;

func использует существующую функцию MATLAB ® для определения операции .

Применить функцию ко всем переменным таблицы A.

B = varfun(func,A)
B=1×2 table
    mean_Var1    mean_Var2
    _________    _________

     -0.188        0.162  

B - таблица, содержащая среднее значение для каждой переменной. Чтобы вернуть числовой вектор вместо таблицы, можно использовать B = varfun(func,A,'OutputFormat','uniform').

Вычислите групповые значения переменных в таблице, Aи вернуть их в виде строк в таблице, B.

Создайте таблицу, в которой одна переменная определяет группы.

A = table({'test2';'test1';'test2';'test3';'test1'},...
    [0.71;-2.05;-0.35;-0.82;1.57],[0.23;0.12;-0.18;0.23;0.41])
A=5×3 table
      Var1       Var2     Var3 
    _________    _____    _____

    {'test2'}     0.71     0.23
    {'test1'}    -2.05     0.12
    {'test2'}    -0.35    -0.18
    {'test3'}    -0.82     0.23
    {'test1'}     1.57     0.41

Определите анонимную функцию для поиска среднего значения ввода.

func = @mean;

func использует существующую функцию MATLAB ® для определения операции .

Применить функцию к каждой группе данных, определенной Var1.

B = varfun(func,A,'GroupingVariables','Var1')
B=3×4 table
      Var1       GroupCount    mean_Var2    mean_Var3
    _________    __________    _________    _________

    {'test1'}        2           -0.24        0.265  
    {'test2'}        2            0.18        0.025  
    {'test3'}        1           -0.82         0.23  

B содержит переменную с именем GroupCount для указания количества записей из таблицы A в этой группе.

Создайте расписание, содержащее примеры данных. Время строк расписания также определяет группы.

dt = datetime(2016,1,1)+days([0 1 1 2 3 3])';
A = timetable(dt,[0.71;-2.05;-0.35;-0.82;1.57;0.09],...
              [0.23;0.12;-0.18;0.23;0.41;0.02],...
              'VariableNames',{'x' 'y'})
A=6×2 timetable
        dt           x        y  
    ___________    _____    _____

    01-Jan-2016     0.71     0.23
    02-Jan-2016    -2.05     0.12
    02-Jan-2016    -0.35    -0.18
    03-Jan-2016    -0.82     0.23
    04-Jan-2016     1.57     0.41
    04-Jan-2016     0.09     0.02

Вычислите групповые значения переменных в расписании. varfun прибыль B как расписание, потому что A - это расписание. При указании времени строки в качестве переменной группировки нельзя указать ни одну переменную в качестве другой переменной группировки.

B = varfun(@mean,A,'GroupingVariables','dt')
B=4×3 timetable
        dt         GroupCount    mean_x    mean_y
    ___________    __________    ______    ______

    01-Jan-2016        1          0.71      0.23 
    02-Jan-2016        2          -1.2     -0.03 
    03-Jan-2016        1         -0.82      0.23 
    04-Jan-2016        2          0.83     0.215 

Входные аргументы

свернуть все

Функция, заданная как дескриптор функции. Функцию можно определить в файле или как анонимную функцию. Если func соответствует более чем одному файлу функции (то есть, если func представляет собой набор перегруженных функций), MATLAB ® определяет, какую функцию следует вызвать на основе класса входных аргументов.

Используйте 'OutputFormat','cell' аргумент пары имя-значение, если функция func берёт один входной аргумент и возвращает массивы с разным количеством строк каждый раз при вызове. В противном случае func должен возвращать массивы с одинаковым количеством строк.

Пример: func = @(x) x.^2; вычисляет квадрат каждого элемента ввода.

Входная таблица, заданная как таблица или расписание.

Аргументы пары «имя-значение»

Укажите дополнительные пары, разделенные запятыми Name,Value аргументы. Name является именем аргумента и Value - соответствующее значение. Name должен отображаться внутри кавычек. Можно указать несколько аргументов пары имен и значений в любом порядке как Name1,Value1,...,NameN,ValueN.

Пример: 'InputVariables',2 использует только вторую переменную в A в качестве входных данных для func.

Спецификаторы для выбора переменных A для передачи в func, указанная как пара, разделенная запятыми, состоящая из 'InputVariables' и положительное целое число, вектор положительных целых чисел, символьный вектор, клеточный массив символьных векторов, строковый массив, логический вектор или дескриптор функции.

При указании 'InputVariables' как дескриптор функции, то он должен возвратить логический скаляр, и varfun передает только переменные в A где функция возвращает 1 (true).

Одна или несколько переменных в A которые определяют группы строк, указанные как разделенная запятыми пара, состоящая из 'GroupingVariables' и положительное целое число, вектор положительных целых чисел, символьный вектор, клеточный массив символьных векторов, строковый массив или логический вектор.

Значение 'GroupingVariables' указывает, какие переменные таблицы являются переменными группировки, а не их типами данных. Переменная группировки может быть числовой или иметь тип данных categorical, calendarDuration, datetime, duration, logical, или string.

Строки в A которые имеют одинаковые значения переменной группировки, принадлежат к одной группе. varfun применяется func к каждой группе строк в каждой из переменных A, а не для каждой переменной целиком.

Если какая-либо переменная группирования содержит NaNs или отсутствующие значения (например, NaTs, неопределенные категориальные значения или отсутствующие строки), то соответствующие строки не принадлежат ни к одной группе и исключаются из вывода.

Метки строк могут быть переменными группировки. Можно группировать только по меткам строк, по одной или нескольким переменным в Aили на метках строк и переменных вместе.

  • Если A является таблицей, то метки являются именами строк.

  • Если A является расписанием, то метки - время строки.

Выходные данные, B, имеет одну строку для каждой группы при указании 'OutputFormat','uniform' или 'OutputFormat','cell'. При указании 'OutputFormat','table' или 'OutputFormat','timetable', размеры выходов из func определить, сколько строк B соответствуют каждой группе.

Формат B, указанная как пара, разделенная запятыми, состоящая из 'OutputFormat' и либо значение 'uniform', 'table', 'timetable', или 'cell'.

'table'

varfun возвращает таблицу с одной переменной для каждой переменной в A (или каждой переменной, указанной в 'InputVariables'). Для сгруппированных вычислений, B, также содержит переменные группировки.

'table' позволяет использовать функцию, которая возвращает значения различных размеров или типов данных для различных переменных в A. Однако для негруппированных вычислений func должен возвращать массивы с одинаковым количеством строк при каждом вызове. Для сгруппированных вычислений, func должен возвращать значения с одинаковым количеством строк при каждом вызове для данной группы.

Если A является таблицей, то это формат вывода по умолчанию.

'timetable'

varfun возвращает расписание с одной переменной для каждой переменной в A (или каждой переменной, указанной в 'InputVariables'). Для сгруппированных вычислений, B также содержит переменные группировки.

varfun создает время строки B из времени строки A. Если время строки назначено B не имеют смысла в контексте вычислений, выполняемых с использованием func, затем укажите формат вывода как 'OutputFormat','table'.

Если A является расписанием, то это формат вывода по умолчанию.

'uniform'

varfun объединяет значения в вектор. func должен возвращать скаляр с тем же типом данных при каждом вызове.

'cell'

varfun прибыль B в виде массива ячеек. 'cell' позволяет использовать функцию, возвращающую значения различных размеров или типов данных.

Функция для вызова, если func ошибка, указанная как пара, разделенная запятыми, состоящая из 'ErrorHandler' и дескриптор функции. Определите эту функцию так, чтобы она повторяла ошибку или возвращала допустимые выходы для функции func.

MATLAB вызывает указанную функцию обработки ошибок с двумя входными аргументами:

  • Структура со следующими полями:

    identifier

    Идентификатор ошибки.

    message

    Текст сообщения об ошибке.

    index

    Индекс переменной, для которой произошла ошибка.

    name

    Имя переменной, для которой произошла ошибка.

  • Набор входных аргументов для функции func во время ошибки.

Например,

function [A, B] = errorFunc(S, varargin)
warning(S.identifier, S.message)
A = NaN; B = NaN;

Выходные аргументы

свернуть все

Выходная таблица, возвращаемая как таблица или расписание. B может хранить метаданные, такие как описания, единицы измерения переменных, имена переменных и имена строк. Дополнительные сведения см. в разделах «Свойства» table или timetable.

Расширенные возможности

.
Представлен в R2013b