Spinning Pinwheel when using "indirect" functions.

Has anyone else noted that numbers is very slow when you use indirect function?


I am doing something like this: =indirect(concatenate("Data::",B$1,$A2)) where I put the row number and column letter in these two references. This allows me to map the data from this other table "Data" into this table. When I have even as few as 24 rows and 10 columns it takes 5 minutes to compute this. During this time I get the spinning colored pinwheel and Numbers freezes up. It eventually comes back, but doing any edits in this spreadsheet have become very diffcult because the pinwheel likes to come back. Even opening the spreadsheet will cause a 5 minute wait when I view this table. When I really get serious with my data analysis, I copy this to 240 rows and 10 columns and now I am hung for over 30 minutes.


I am running Numbers '09 v2.1 in Lion 10.7.2 on MacBook Pro 2.53MHz, Quad processors, Core i5 with 4GB of memory. I don't have any other applications runnning other than Safari and Mail.


This is very frustrating. I just wonder if other people are having this problem and if there is a work-around other than waiting for an update.

MacBook Pro (17-inch Mid 2010), Mac OS X (10.7.2)

Posted on Jan 9, 2012 8:38 AM

Reply
5 replies

Jan 26, 2012 7:08 AM in response to Jerrold Green1

Jerry,


Sorry for my slow response. And thanks for the suggestion.


Update: I have done some benchmarks and the issue is definitely the INDIRECT function is the culprit. I was able to get a 40% speed-up by removing the CONCATENATE commands from within the INDIRECT and building the string for the INDIRECT in a separate cell. If I remove the INDIRECT calls, the spreadsheet is very fast.


Background: The problem I am trying to solve is that I have a piece of lab equipment that collects data--lots of data--and exports it in CSV format. The imported file is organized in a two dimensional fashion since it is reading a plate that is organized in the same fashion. So I add to the raw imported file a mapping for what each data point represents. This "purpose" is also arranged in a two dimensional fashion and varies from experiement to experiment. The crux of the problem is that I want to export the data to JMP for statistical analysis but the data has to be converted from this two diminsional array to a more conventional format where each data point is represented by a row. The row contains the purpose and physical data related to the experiment and the single data point from the grid. So I end up with a file with lots of rows at the end. So with the INDIRECT statement I can tell Numbers to lookup the data point with the criteria of this experiement with this purpose and it fills in all the rows in a format that can be exported to JMP. You can see the flexibility.


Your Suggestion: So the cool part of your suggestion is that I can use INDIRECT to find the first data point in my database and then perhaps all of the subsequent rows can be filled in with INDEX and OFFSET. I will give this a try and post here. Right now I am in a 30min wait cycle for the INDIRECT calls to execute on a dataset represented by 240 rows, just because I opened it.


Plan B: The other solution I was considering since the overhead of Numbers grows expoentially with the size of the dataset, is to Cut and "Paste Values" after the spreadsheet computes the results for a single experiement. Thus I can manually build-up my export table, by doing a ton of small cut and paste operations into a much smaller table that has the INDIRECT functions calls.


Bug: I consider this to be a bug in Numbers in that the overhead of doing INDIRECT calls grows exponentially less efficient as the number of calls to INDIRECT increases. The interesting thing is that the input data set was not growing in this benchmark, but only the calls to INDIRECT.

Jan 26, 2012 7:18 AM in response to dhiser

dh,


This type of crunching isn't Numbers' strong point, by a wide margin. If I were you, I'd give it a try in LibreOffice (free Office clone). Then again, if I was really interested in efficiency and could afford it, I'd acquire MatLab for such a job. Matlab would also be great for visualizing the data, as it would be so easy to display the raw data as an image.


Jerry

Feb 7, 2012 3:31 PM in response to Jerrold Green1

Jerry,


Here is an update, since I found some time to work on it. I changed everything to index() function and it is blazing fast. It was not too dificult a change. The other test was that I ported the original indirect() function to NeoOffice (Office clone) and it was also blazing fast.


Conclusion: avoid indirect() function calls in Numbers. Use index() or another spreadsheet program if for some reason you need the indirect().


Blessings,

Doug

This thread has been closed by the system or the community team. You may vote for any posts you find helpful, or search the Community for additional answers.

Spinning Pinwheel when using "indirect" functions.

Welcome to Apple Support Community
A forum where Apple customers help each other with their products. Get started with your Apple Account.