Mathematica Stack Exchange is a question and answer site for users of Mathematica. Join them; it only takes a minute:

Sign up
Here's how it works:
  1. Anybody can ask a question
  2. Anybody can answer
  3. The best answers are voted up and rise to the top

I have a list named data that contains lists of arbitrary size,

data={{0.5, 0.5}, {}, {0.5, 0.5, 0.5}, {}, {}, {}, {}, {}, {}, {}}

I now want to generate for each sub-list the appropriate number of sliders (for the empty sets none, though I believe they are easy to skip). However, I am not sure if this is even possible.

In my quest I stumbled upon this thread, Manipulate with a variable number of sliders, which allows me to generate sliders for one sub-list,

Table[With[{i = i}, {Slider[Dynamic[data[[1]][[i]]]], 
 Dynamic[data[[1]][[i]]]}], {i, Length[data[[1]]]}]]] 

This works perfectly fine if I use a constant as an index for data, in this case 1.

However, if I want to extend this by using a for loop or a table to make that index variable, say

Table[With[{i = i}, {Slider[Dynamic[data[[k]][[i]]]], 
 Dynamic[data[[k]][[i]]]}], {i, Length[data[[k]]]}]]],{k,1,1}]

the k gets marked red and the code fails. Is it even possible to generate sliders this way? I imagine the reason that the code fails is that Dynamic requires the object under consideration to remain constant, but is there a way around this?

share|improve this question
What does the numbers in the sublists represent? – C. E. Jun 16 '14 at 22:02
Probabilities which exist for some variables but not for others. – hps Jun 16 '14 at 22:04
up vote 4 down vote accepted

May be something like this would work:

   data2 = Select[data, Length@# > 1 &];

    With[{i = i, k = k}, {Slider[Dynamic[data2[[k]][[i]]]], 
      Dynamic[data2[[k]][[i]]]}], {k, 1, Length@data2, 1}, {i, 1, 

Second option: To work directly with data you can try this:

 data = {{0.5, 0.5}, {}, {0.5, 0.5, 0.5}, {}, {}, {}, {}, {}, {}, {}};
 index = Complement[Range[Length@data], Position[data, {}] // Flatten];

    With[{i = i, k = k}, {Slider[Dynamic[data[[k]][[i]]]], 
      Dynamic[data[[k]][[i]]]}], {k, index}, {i, 1, 
share|improve this answer
Is there a way for the sliders to change the values in the original data, not data2? Apart from that it is exactly what I am looking for. – hps Jun 16 '14 at 22:34
@hpschrei I have added what you want. – Algohi Jun 17 '14 at 2:12
Perfect, thank you so much! – hps Jun 17 '14 at 6:01

Your Answer


By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.