2014-10-28 85 views
3

我只是試圖找出Matlab是否與head()中的簡單等價物R?它應該顯示/打印數組的前5行。因此,考慮以下table功能類似於Matlab中的head()

var1 = transpose(1:6); 
var2 = transpose(2:7); 
aa = table(var1,var2); 

我要尋找一個funtion xx產生相同的:

aa(1:5,:) 

ANS =

var1 var2 
____ ____ 

1  2 
2  3 
3  4 
4  5 
5  6 

類似:

xx(aa) 

我當然可以繼續使用上面的索引,但使用函數會更方便。我在R中廣泛使用head()

+1

爲什麼不直接自己寫呢?這聽起來像是你用於原型設計的東西,所以如果它只對你的電腦本地的話,這應該不成問題。寫你自己的,並將它添加到你的路徑...... – Dan 2014-10-28 14:55:34

+0

正是,我正在寫同樣的東西。它看起來微不足道的創造。它只是一個代碼行的功能,只是寫它! – 2014-10-28 14:56:18

+1

是的,的確如此。我想它不存在,然後... – Mace 2014-10-28 15:13:25

回答

0

如果您要的只是最上面的幾行,那麼只需鍵入mydata[1:5,]

我使用以下玩具,從某個人的:-) cgwtools包,它允許您指定要顯示的項目數,並有一個選項,如果需要跳過幾個元素。碰巧,我選擇不保留尺寸,以便更容易檢查list對象。隨意按照您的需求修改&這個代碼(例如,如果您只需要數據的「首部」,請移除返回最後一個numel元素的部分)。

short <-function (x = seq(1, 20), numel = 4, skipel = 0, ynam = deparse(substitute(x))) 
{ 
    ynam <- as.character(ynam) 
    ynam <- gsub(" ", "", ynam) 
    if (is.list(x)) 
     x <- unlist(t(x)) 
    if (2 * numel >= length(x)) { 
     print(x) 
    } 
    else { 
     frist = 1 + skipel 
     last = numel + skipel 
     cat(paste(ynam, "[", frist, "] thru ", ynam, "[", last, 
      "]\n", sep = "")) 
     print(x[frist:last]) 
     cat(" ... \n") 
     cat(paste(ynam, "[", length(x) - numel - skipel + 1, 
      "] thru ", ynam, "[", length(x) - skipel, "]\n", 
      sep = "")) 
     print(x[(length(x) - numel - skipel + 1):(length(x) - 
      skipel)]) 
    } 
} 
3

這相當於頭()和尾()在R兩種功能,您可以複製/源代碼粘貼到.m文件並將其保存在您需要的目錄:

function head(data, varargin) 
%head - displays the first n rows of an array 
% 
% Syntax: head(data, n) 
% 
% Inputs: 
% data - data to display (table, double) 
% n - number of rows (integer, optional input) 
% 
% Author: Daniel A. Brodén 
% KTH, Royal Institute of Technology, Osquldas Väg 10, 100 44, Stockholm 
% email: [email protected] 
% Website: http://www.kth.se/profile/danbro 
% August 2015; Last revision: Aug-2015 
% Define parser object 
p = inputParser; 

% Required inputs 
addRequired(p, 'data') 

% Default values 
default_n = 10;         

% Optional inputs 
checkInt = @(x) validateattributes(x,{'numeric'},{'integer','positive'}); 
addOptional(p, 'n', default_n, checkInt) 

% Parse inputs 
parse(p, data, varargin{:}) 

% Conditions 
if size(p.Results.data, 1) < p.Results.n 
    error('Not enough rows') 
end 

% Return 
data(1:p.Results.n,:) 
end 

代碼尾

function tail(data, varargin) 
%tail - displays the last n rows of an array 
% 
% Syntax: tail(data, n) 
% 
% Inputs: 
% data - data to display (table, double) 
% n - number of rows (integer, optional input) 
% 
% Author: Daniel A. Brodén 
% KTH, Royal Institute of Technology, Osquldas Väg 10, 100 44, Stockholm 
% email: [email protected] 
% Website: http://www.kth.se/profile/danbro 
% August 2015; Last revision: Aug-2015 

% Parser object 
p = inputParser; 

% Required inputs 
addRequired(p, 'data') 

% Default values 
default_n = 10; 

% Optional inputs 
checkInt = @(x) validateattributes(x,{'numeric'},{'integer','positive'}); 
addOptional(p, 'n', default_n, checkInt) 

% Parse inputs 
parse(p, data, varargin{:}) 

% Conditions 
if size(p.Results.data, 1) < p.Results.n 
    error('Not enough rows') 
end 

% Return 
data((size(data,1)-p.Results.n + 1):size(data,1),:) 
end 
+0

爲什麼你不通過'flipud(data)'到'head'爲了獲得'tail'函數? – Alex 2015-12-10 23:25:24

+0

我想也可以使用flipud()函數。這裏的優點是head()和tail()函數是相互獨立的。 – danbro 2016-08-02 07:45:48

+0

但是如果你更新了任何一張支票,你必須做另一個... – Alex 2016-08-02 09:39:05

0

你可以這樣寫:

aa(1:min(5, end), :) 

或者做一個相同的功能