Table variable subscripts must be real positive integers

Using the data from https://la.mathworks.com/help/finance/black-litterman-portfolio-optimization.html, and running the code head(T(:,["Dates" benchmarkName assetNames])), get the following error: Table variable subscripts must be real positive integers, logicals, character vectors, or cell arrays of character vectors. I dont now how to fix it.
thanks

9 commentaires

This code (copied from the referenced page) works for me, can you double check what's in the benchmarkName and assetNames variables?
T = readtable('dowPortfolio.xlsx');
assetNames = ["AA", "AIG", "WMT", "MSFT", "BA", "GE", "IBM"];
benchmarkName = "DJI";
head(T(:,["Dates" benchmarkName assetNames]))
in the benchmarkName is just the name DJI and the assetNames the names "AA", "AIG", "WMT", "MSFT", "BA", "GE", "IBM", here is the whole code:
>> T = readtable('dowPortfolio.xlsx');
>> assetNames = ["AA", "AIG", "WMT", "MSFT", "BA", "GE", "IBM"];
benchmarkName = "DJI";
head(T(:,["Dates" benchmarkName assetNames]))
Table variable subscripts must be real positive integers, logicals, character vectors, or cell arrays of character vectors.
What version of MATLAB? (i.e. >> version)
The error message doesn't indicate string as an option which makes me think it's before 2016b
In which case, try:
assetNames = {'AA' 'AIG' 'WMT' 'MSFT' 'BA' 'GE' 'IBM'};
benchmarkName = 'DJI';
head(T(:,['Dates' benchmarkName assetNames]))
Version 2018, I tried the 'Dates' but didnt work.
when running the whos code get:
whos benchmarkName
Name Size Bytes Class Attributes
benchmarkName 1x1 134 string
Eduardo Orellana
Eduardo Orellana le 29 Juil 2021
Modifié(e) : Eduardo Orellana le 29 Juil 2021
The data shows in the following format:
'03-01-2006' 10847,4100000000 28,7200000000000 68,4100000000000 51,5300000000000 68,6300000000000
'04-01-2006' 10880,1500000000 28,8900000000000 68,5100000000000 51,0300000000000 69,3400000000000
'05-01-2006' 10882,1500000000 29,1200000000000 68,6000000000000 51,5700000000000 68,5300000000000
I dont know if that is an issue
How about breaking down the problem a little:
head(T)
head(T(:,'Dates'))
head(T(:,"Dates"))
head(T(:,benchmarkName))
head(T(:,assetNames))
Which of these lines fails/works?
Eduardo Orellana
Eduardo Orellana le 29 Juil 2021
Modifié(e) : Eduardo Orellana le 29 Juil 2021
The last three didnt work, that is:
head(T(:,"Dates"))
head(T(:,benchmarkName))
head(T(:,assetNames))
Dave B
Dave B le 29 Juil 2021
Modifié(e) : Dave B le 29 Juil 2021
That helps, this sort of fits with my previous hypothesis i.e. that you need to provide char not string:
Let's work our way back to the final bit building off of:
head(T(:,'Dates'))
head(T(:,'DJI')) % just a different table variable
head(T(:,{'Dates' 'DJI'}) % Two table variables
% specifying 'DJI' in a workspace variable
benchmarkName = 'DJI';
head(T(:,{'Dates' benchmarkName}))
% specifying all of the assetNames
assetNames = {'AA' 'AIG' 'WMT' 'MSFT' 'BA' 'GE' 'IBM'};
head(T(:,assetNames))
% one way to put these all together
head(T(:,{'Dates' benchmarkName assetNames{:}}))
% the line of code from my previous comment
% (just in case something got confused and this works now)
head(T(:,['Dates' benchmarkName assetNames]))
It worked. Thank you Dave.

Connectez-vous pour commenter.

Réponses (1)

Eike Blechschmidt
Eike Blechschmidt le 29 Juil 2021
I guess you just forgot the quotation marks around benchmarkName and assetNames.

Catégories

Tags

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by