varfun

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

Описание

пример

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

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

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

пример

B = varfun(func,A,Name,Value) применяет функцию func отдельно к каждой переменной таблицы или timetable 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 fails, задается как разделенная разделенными запятой парами, состоящая из '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