滞后 table 个变量的函数

Function to lag table variables

是一种将 table 中的所有变量滞后一定数量的滞后的简单方法,用 NaN 替换值。

table变量不支持长度函数导致matlab内置lagmatrix函数失效。

环境为R2015a

对于给定的数组

a= magic(5);

a =

17    24     1     8    15
23     5     7    14    16
 4     6    13    20    22
10    12    19    21     3
11    18    25     2     9

lagmatrix(a,3)
ans =
NaN   NaN   NaN   NaN   NaN
NaN   NaN   NaN   NaN   NaN
NaN   NaN   NaN   NaN   NaN
 17    24     1     8    15
 23     5     7    14    16

在 table 上尝试 运行 相同的命令会产生以下错误

a=array2table(magic(5))
a = 

Var1    Var2    Var3    Var4    Var5
____    ____    ____    ____    ____

17      24       1       8      15  
23       5       7      14      16  
 4       6      13      20      22  
10      12      19      21       3  
11      18      25       2       9  

lagmatrix(a,3)
Error using table/length (line 395)
Undefined function 'length' for input arguments of type 'table'.  Use the     HEIGHT,
WIDTH, or SIZE functions instead.

Error in lagmatrix (line 52)
if numel(Y) == length(Y)

是否有一个简单的命令可以在 Matlab 中对 table 变量执行上述行为?

你可以试试:

function [ lagA] = lagmatrix(A,n)
% A matrix to lag
% n number of lags
% lagA output matrix
lagA = NaN(size(A))
lagA(n+1:end,:) = A(1:end-n,:)
lagA = array2table(lagA) 
end

编辑:忘记将矩阵转换为数组。

为什么不只是这个?

a = array2table(magic(5));     %// example table
n = 3;                         %// lag
a(n+1:end,:) = a(1:end-n,:);
a{1:n,:} = NaN;