2015-09-10 2 views
1

Мне интересно Если можно отобразить ячейку в виде таблицы при использовании Octave. Мне было бы легче получить информацию о Cell. Если он отображался в одном столбце, я должен прокручивать все время.Показать ячейку в виде таблицы

ответ

2

Дисплей массив ячеек по умолчанию выглядит своего рода сложнее:

octave> a = {"foo", "bar", "qux"; "baz", "nof", "zot"} 
a = 
{ 
    [1,1] = foo 
    [2,1] = baz 
    [1,2] = bar 
    [2,2] = nof 
    [1,3] = qux 
    [2,3] = zot 
} 

Было бы гораздо лучше, чтобы увидеть что-то такое, как:

octave> a = {"foo", "bar", "qux"; "baz", "nof", "zot"} 
a(1:2, 1:3) = 
{ 
    "foo" "bar" "qux" 
    "baz" "nof" "zot" 
} 

Однако массив ячеек может иметь что-то внутри каждого из его клетки. Это включает в себя другие массивы ячеек, структуры и очень длинные строки с разрывами строк. Из-за этого разумное отображение массива ячеек очень зависит от его содержимого и того, что пользователь заинтересован в их извлечении.

Это означает, что пользователь должен создать функцию, которая отображает то, что он хочет. Я приведу пример, полезный для вышеприведенного случая, который является наиболее распространенным случаем, т. Е. Двухмерным массивом ячеек коротких однострочных строк. Решение состоит в том, чтобы создать формат для Printf на лету из самой длинной строки на каждой колонке, как так:

octave> a = {"foobar", "bar", "qux"; "baz", "nofnot", "zotr"}; 
octave> col_width = max (cellfun (@numel, a)) +4 
col_width = 

    10 10 8 

octave> row_template= [sprintf("%%%is", col_width) "\n"] 
row_template = %10s%10s%8s 

octave> printf (row_template, a'{:}) 
    foobar  bar  qux 
     baz nofnot zotr 

Или на одной строке:

octave> printf ([sprintf("%%%is", max (cellfun (@numel, a))+4) "\n"], a'{:}) 
    foobar  bar  qux 
     baz nofnot zotr 

Более сложные клеточные массивы, с более сложная, но организованная структура, может вместо этого использовать Octave's dataframe. Например:

octave> pkg load dataframe 
octave> C = {"Patient Name", "Volume", "Quality", "Owner"; "Joe", 200, .95, "MR"; "Dana", 186, .93, "MR"; "Cassidy", 197, .96, "SP"}; 
octave> dataframe (C) 
ans = dataframe with 3 rows and 4 columns 
_1 Patient_Name Volume Quality Owner  
Nr   char double double char  
1   Joe 200 0.95000 MR  
2   Dana 186 0.93000 MR  
3  Cassidy 197 0.96000 SP  
+0

Спасибо за ваш ценный ответ. Теперь мне нужно будет установить пакет dataframe, так как 1. methode заканчивается довольно грязно, но это был умный способ мышления. – KenStark

+0

@ KenStark это сработало? – carandraug

+0

Поскольку мой сервер не имеет доступа к Интернету, мне нужно установить «dataframe» вручную. Я работаю над этим. – KenStark

-1

Кажется, что функция cell2table, которая доступна в matlab, не реализована в октаве. Я полагаю, что ячейку нельзя рассматривать в виде таблицы в октаве.

+0

Это на самом деле не отвечает на вопрос. Функция matlab 'cell2table' не только не существует в Octave, даже в Matlab используется для преобразования ячейки в объект таблицы. Вопрос заключается в отображении массива ячеек в табличном формате, поскольку по умолчанию они отображаются по одному элементу по строке. – carandraug

+0

Если бы вы только могли понять меня правильно, мне просто нужно повернуть его в таблицу, чтобы я мог читать всю информацию за более короткое время. Я был бы признателен за конструктивные комментарии! – KenStark

+0

Я просто предоставил ответ с двумя вариантами. Но реальный ответ очень зависит от вашего массива ячеек. Даже «cell2table» не будет работать в большинстве ячеек. Он полезен только для очень специфического и ограниченного типа ячеек массивов и предназначен для использования объектов таблицы другими функциями, а не для отображения. – carandraug

Смежные вопросы