Вы задали 3 вопроса, и я постараюсь ответить на них все. Как указал belisarius , Mathematica чувствительна к регистру. Итак, ваш код должен быть:
In[1]:=ReadList["testA.txt", Number, RecordLists -> True]
Однако, это все равно вызовет ошибку, поскольку ваша первая строка состоит из String
s, а не Number
s. Итак, самое простое, что нужно сделать, это пойти с решением Майкла Пилата и использовать Import
. Это возвращает список списков, где каждая запись в файле становится одним из подсписков.
Для доступа к конкретному подсписку вы используете Part
или его более простую форму [[ ]]
, как указано ниже:
In[2]:={{100, 2010, 2, 20, 2010, 8, 30},
{110, 2010, 4, 30, 2010, 9,12},
{112, 2010, 8, 20, 2010, 10, 28}}[[1]]
Out[2]:={100, 2010, 2, 20, 2010, 8, 30}
Или, если вы хотите определенный столбец
In[3]:={{100, 2010, 2, 20, 2010, 8, 30},
{110, 2010, 4, 30, 2010, 9,12},
{112, 2010, 8, 20, 2010, 10, 28}}[[All,4]]
Out[3]:={20, 30, 20}
Теперь, чтобы добавить еще один столбец в список, есть несколько способов. Самый простой способ - Transpose
ваши данные,
In[4]:=Transpose[data]
Out[4]:={{100, 110, 112}, {2010, 2010, 2010}, {2, 4, 8},
{20, 30, 20}, {2010, 2010, 2010}, {8, 9, 10}, {30, 12, 28}}
выберите текущие строки и Apply
функцию для них,
In[5]:=Plus @@ Out[4][[{3,6}]]
Out[5]:={10,13,18}
присоединить новую строку к старым данным и транспонировать обратно
In[6]:=Out[4]~Join~Out[5] // Transpose
Out[6]:={100, 2010, 2, 20, 2010, 8, 30, 10},
{110, 2010, 4, 30, 2010, 9, 12, 13},
{112, 2010, 8, 20, 2010, 10, 28, 18}}
Концептуально более сложный, но более простой метод заключается в использовании Map
для применения функции к каждой строке в исходных данных, которая возвращает строку с новым присутствующим значением
In[7]:=Map[#~Join~{Plus@@#[[{3,6}]]}&, data]
Out[7]:={100, 2010, 2, 20, 2010, 8, 30, 10},
{110, 2010, 4, 30, 2010, 9, 12, 13},
{112, 2010, 8, 20, 2010, 10, 28, 18}}