Main Content

本页的翻译已过时。点击此处可查看最新英文版本。

varfun

向表或时间表变量应用函数

说明

示例

B = varfun(func,A) 分别向表或时间表 A 的每个变量应用函数 func,并在表或时间表 B 中返回值。

函数 func 必须取一个输入参数,并在每次调用时返回行数相同的数组。输出参数中的第 i 个变量 B{:,i} 等于 func(A{:,i})

如果 A 是时间表,而 func 跨多个行组聚合数据,则 varfunA 中每个行组的第一个行时间指定为 B 中对应的行时间。要以表的形式返回 B 而不带行时间,请将 'OutputFormat' 指定为 'table'

示例

B = varfun(func,A,Name,Value) 通过一个或多个 Name,Value 对组参数指定的其他选项,分别向表或时间表 A 的每个变量应用函数 func

例如,您可以指定要传递给该函数的变量。

示例

全部折叠

定义按元素函数并向表中的变量应用该函数,以对所有元素求平方。

定义包含数值变量的表。

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® 将基于输入参数的类确定要调用的函数。

如果函数 func 取一个输入参数,并在每次调用时返回行数不同的数组,则使用 'OutputFormat','cell' 名称-值对组参数。否则,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' 的值指定哪些表变量是分组变量,而不是其数据类型。分组变量可以为数值类型或者以下数据类型:categoricalcalendarDurationdatetimedurationlogicalstring

A 中具有相同分组变量值的行属于同一个组。varfunA 每个变量的每个行组(而非每个整体变量)应用 func

如果任一分组变量包含 NaN 或缺失值(例如 NaT、未定义的分类值或缺失字符串),则对应的行不属于任何组,并会从输出中排除。

行标签可以是分组变量。您可以单独按行标签分组,按 A 中的一个或多个变量分组,或者同时按行标签和变量分组。

  • 如果 A 是表,则标签为行名称。

  • 如果 A 是时间表,则标签为行时间。

如果指定 'OutputFormat','uniform''OutputFormat','cell',则输出 B 的每个组各占一行。如果指定 '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 根据 A 的行时间创建 B 的行时间。如果为 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 可以存储元数据,例如说明、变量单位、变量名称和行名称。有关详细信息,请参阅 tabletimetable 的“属性”部分。

扩展功能

在 R2013b 中推出