The Altair Community is migrating to a new platform to provide a better experience for you. In preparation for the migration, the Altair Community is on read-only mode from October 28 - November 6, 2024. Technical support via cases will continue to work as is. For any urgent requests from Students/Faculty members, please submit the form linked here
[solved] ConcurrentModificationException when iterating over attributes (script)
Dear all,
having recently started with writing scripts, I have an idea what causes this error but unfortunately no idea how to solve it :-\
This piece of code is supposed to create a new attribute with a prefix in the name for each attribute in the example set.
(e.g. "att1" leads to "prefix_att1" and "att2" leads to "prefix_att2")
I suppose the error occurs because the for loop shall iterate over each attribute in the example set but while doing so the code creates new attributes and adds them to the example set.
Additionally, the examples of all newly created attributes - and only the newly created - shall be edited (e.g. set to "123").
PS: I forgot to say: When I run this routine a second time (in the same script right after the first loop) it would like to create new attributes again (let's say prefix2_att1) but only for the original attributes an not those that have been recently created during the first loop.
Does anyone have a hint how to proceed?
Kind regards
Sachs
having recently started with writing scripts, I have an idea what causes this error but unfortunately no idea how to solve it :-\
This piece of code is supposed to create a new attribute with a prefix in the name for each attribute in the example set.
(e.g. "att1" leads to "prefix_att1" and "att2" leads to "prefix_att2")
I suppose the error occurs because the for loop shall iterate over each attribute in the example set but while doing so the code creates new attributes and adds them to the example set.
Additionally, the examples of all newly created attributes - and only the newly created - shall be edited (e.g. set to "123").
PS: I forgot to say: When I run this routine a second time (in the same script right after the first loop) it would like to create new attributes again (let's say prefix2_att1) but only for the original attributes an not those that have been recently created during the first loop.
Does anyone have a hint how to proceed?
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<process version="6.1.000">
<context>
<input/>
<output/>
<macros/>
</context>
<operator activated="true" class="process" compatibility="6.1.000" expanded="true" name="Process">
<process expanded="true">
<operator activated="true" class="generate_data" compatibility="6.1.000" expanded="true" height="60" name="Generate Data" width="90" x="45" y="30"/>
<operator activated="true" class="execute_script" compatibility="6.1.000" expanded="true" height="76" name="Execute Script" width="90" x="179" y="30">
<parameter key="script" value="import com.rapidminer.tools.Ontology; ExampleSet es = input [0]; for ( Attribute att : es.getAttributes() ) { 	String att_name = "prefix" + att.getName(); 	Attribute newAttribute = AttributeFactory.createAttribute( att_name, Ontology.ATTRIBUTE_VALUE_TYPE.NUMERICAL ); 	es.getExampleTable().addAttribute( newAttribute ); 	es.getAttributes().addRegular( newAttribute ); 	es.getExample( 0 ).setValue( att, 123 ); } return input;"/>
</operator>
<connect from_op="Generate Data" from_port="output" to_op="Execute Script" to_port="input 1"/>
<connect from_op="Execute Script" from_port="output 1" to_port="result 1"/>
<portSpacing port="source_input 1" spacing="0"/>
<portSpacing port="sink_result 1" spacing="0"/>
<portSpacing port="sink_result 2" spacing="0"/>
</process>
</operator>
</process>
Kind regards
Sachs
0
Answers
YEAY! I made it So happy 8)
Cheers
Sachs