rowfun

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

Описание

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

func принимает size(A,2) входы.

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

пример

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

Для примера можно задать, какие переменные передавать в функцию func и как позвонить func.

Примеры

свернуть все

Применить функцию hypot к каждой строке таблицы 5 на 2 A чтобы найти кратчайшее расстояние между переменными x и y.

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

rng('default')
x = randi(10,[5,1]);
y = randi(10,[5,1]);
A = table(x,y)
A=5×2 table
    x     y 
    __    __

     9     1
    10     3
     2     6
    10    10
     7    10

Примените функцию, hypot, к каждой строке A. Функция hypot принимает два входов и возвращает один выход.

B = rowfun(@hypot,A,'OutputVariableNames','z')
B=5×1 table
      z   
    ______

    9.0554
     10.44
    6.3246
    14.142
    12.207

B является таблицей.

Добавьте выход функции, B, к входу таблице, A.

[A B]
ans=5×3 table
    x     y       z   
    __    __    ______

     9     1    9.0554
    10     3     10.44
     2     6    6.3246
    10    10    14.142
     7    10    12.207

Задайте и примените геометрическую брауновскую модель движения к области значений параметров.

Создайте функцию в файле с именем gbmSim.m который содержит следующий код.

% Copyright 2015 The MathWorks, Inc.

function [m,mtrue,s,strue] = gbmSim(mu,sigma)
% Discrete approximation to geometric Brownian motion
%
% [m,mtrue,s,strue] = gbmSim(mu,sigma) computes the 
% simulated mean, true mean, simulated standard deviation, 
% and true standard deviation based on the parameters mu and sigma.
numReplicates = 1000; numSteps = 100;
y0 = 1;
t1 = 1;
dt = t1 / numSteps;
y1 = y0*prod(1 + mu*dt + sigma*sqrt(dt)*randn(numSteps,numReplicates));
m = mean(y1); s = std(y1);

% Theoretical values
mtrue = y0 * exp(mu*t1); strue = mtrue * sqrt(exp(sigma^2*t1) - 1);
end

gbmSim принимает два входов, mu и sigma, и возвращает четыре выхода, m, mtrue, s, и strue.

Определите таблицу, params, содержащий параметры для ввода в модель Броуновского движения.

mu = [-.5; -.25; 0; .25; .5];
sigma = [.1; .2; .3; .2; .1];

params = table(mu,sigma)
params =

  5x2 table

     mu      sigma
    _____    _____

     -0.5     0.1 
    -0.25     0.2 
        0     0.3 
     0.25     0.2 
      0.5     0.1 

Примените функцию, gbmSim, к строкам таблицы, params.

stats = rowfun(@gbmSim,params,...
    'OutputVariableNames',...
    {'simulatedMean' 'trueMean' 'simulatedStd' 'trueStd'})
stats =

  5x4 table

    simulatedMean    trueMean    simulatedStd    trueStd 
    _____________    ________    ____________    ________

       0.60501       0.60653       0.05808       0.060805
       0.77916        0.7788         0.161        0.15733
        1.0024             1        0.3048        0.30688
        1.2795         1.284       0.25851        0.25939
        1.6498        1.6487       0.16285        0.16529

Четыре имени переменных, заданные в 'OutputVariableNames' аргумент пары "имя-значение" указывает, что rowfun должен получить четыре выхода от gbmSim. Можно задать меньше имен выходных переменных, чтобы вернуть меньше выходы от gbmSim.

Добавьте выход функции, stats, на вход, params.

[params stats]
ans =

  5x6 table

     mu      sigma    simulatedMean    trueMean    simulatedStd    trueStd 
    _____    _____    _____________    ________    ____________    ________

     -0.5     0.1        0.60501       0.60653       0.05808       0.060805
    -0.25     0.2        0.77916        0.7788         0.161        0.15733
        0     0.3         1.0024             1        0.3048        0.30688
     0.25     0.2         1.2795         1.284       0.25851        0.25939
      0.5     0.1         1.6498        1.6487       0.16285        0.16529

Составьте таблицу, A, где g является сгруппированной переменной.

rng('default')
g = randi(3,[15,1]);
x = rand([15,1]);
y = rand([15,1]);

A = table(g,x,y)
A=15×3 table
    g       x           y    
    _    ________    ________

    3     0.14189     0.70605
    3     0.42176    0.031833
    1     0.91574     0.27692
    3     0.79221    0.046171
    2     0.95949    0.097132
    1     0.65574     0.82346
    1    0.035712     0.69483
    2     0.84913      0.3171
    3     0.93399     0.95022
    3     0.67874    0.034446
    1     0.75774     0.43874
    3     0.74313     0.38156
    3     0.39223     0.76552
    2     0.65548      0.7952
    3     0.17119     0.18687

Определите анонимную функцию, func, чтобы вычислить среднее различие между x и y.

func = @(x,y) mean(x-y);

Найдите среднее различие между переменными в группах 1, 2, и 3 определяется сгруппированной переменной, g.

B = rowfun(func,A,...
    'GroupingVariable','g',...
    'OutputVariableName','MeanDiff')
B=3×3 table
    g    GroupCount    MeanDiff
    _    __________    ________

    1        4         0.032744
    2        3          0.41822
    3        8          0.14656

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

Входные параметры

свернуть все

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

func может принять не более size(A,2) входы. По умолчанию rowfun возвращает первый выход func. Возврат нескольких выходов из func, используйте 'NumOutputs' или 'OutputVariableNames' Аргументы пары "имя-значение".

Пример: func = @(x,y) x.^2+y.^2; принимает два входов и находит сумму квадратов.

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

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

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

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

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

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

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

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

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

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

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

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

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

Индикатор для вызова func с отдельными входами, заданными как разделенная разделенными запятой парами, состоящая из 'SeparateInputs' и любой из них true, false, 1, или 0.

true

func ожидает отдельных входов. rowfun вызывает func с size(A,2) входы, по одному аргументу для каждой переменной данных.

Это поведение по умолчанию.

false

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

Индикатор для передачи значений от переменных камеры к func, заданная как разделенная разделенными запятой парами, состоящая из 'ExtractCellContents' и любой из них false, true, 0, или 1.

true

rowfun извлекает содержимое переменной в A тип данных которого cell и передает значения, а не камеры, в func

Для сгруппированных расчетов значения в каждой группе переменной камеры должны допускать вертикальную конкатенацию.

false

rowfun передает камеры переменной в A тип данных которого cell на func.

Это поведение по умолчанию.

Имена переменных для выходов func, заданная как разделенная разделенными запятой парами, состоящая из 'OutputVariableNames' и вектор символов, массив ячеек векторов символов или строковых массивов с именами, которые непусты и различны. Количество имен должно равняться количеству выходов, требуемых от func.

Кроме того, имена переменных должны быть допустимыми идентификаторами MATLAB. Если действительные идентификаторы MATLAB недоступны для использования в качестве имен переменных, MATLAB использует массив ячеек N векторы символов формы {'Var1'... 'Вар N'} где N - количество переменных. Вы можете определить допустимые имена переменного MATLAB с помощью функции isvarname.

Количество выходов от func, заданная как разделенная разделенными запятой парами, состоящая из 'NumOutputs' и 0 или положительное целое число. Целое число должно быть меньше или равным возможному количеству выходов от func.

Пример: 'NumOutputs',2 причины rowfun для вызова func с двумя выходами.

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

'table'

rowfun возвращает таблицу с одной переменной для каждого выхода func. Для сгруппированных расчетов, B, также содержит сгруппированные переменные.

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

Это формат выхода по умолчанию.

'timetable'

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

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

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

'uniform'

rowfun конкатенирует значения, возвращенные func в вектор. Все выходы func должны быть скалярами с совпадающим типом данных.

'cell'

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

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

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

  • Структура с этими полями:

    identifier

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

    message

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

    index

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

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

Для примера,

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

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

свернуть все

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

Введенный в R2013b