使用宏值作为循环参数迭代
大家好,
今天我第一次在RapidMiner中需要一个简单的for循环的功能。所以我看了一下循环运算符,选择了简单的“Loop”。迭代的次数取决于一些信息提取和预处理,因此我为循环准备了一个很好的属性,其中包含Integer类型的数量。我只是通过“提取宏”提取这个可爱的小整数,并把它输入迭代我的“循环”操作符参数。但不幸的是,宏值似乎是Real类型,并导致错误(从整数属性的值5中提取):
消息:必须指定参数“iterations”的值!期望的整数,但发现'5.0'。
我找不到一种方法来操作宏的数据类型,所以我有点困惑。我几乎不能相信,用可变次数的迭代进行循环是不可能的。我想做一些简单的(i = 1;i <= variableValue;我+ +)。这是目前不可能与“循环”还是我完全偏离轨道?
亲切的问候,
马蒂亚斯
今天我第一次在RapidMiner中需要一个简单的for循环的功能。所以我看了一下循环运算符,选择了简单的“Loop”。迭代的次数取决于一些信息提取和预处理,因此我为循环准备了一个很好的属性,其中包含Integer类型的数量。我只是通过“提取宏”提取这个可爱的小整数,并把它输入迭代我的“循环”操作符参数。但不幸的是,宏值似乎是Real类型,并导致错误(从整数属性的值5中提取):
消息:必须指定参数“iterations”的值!期望的整数,但发现'5.0'。
我找不到一种方法来操作宏的数据类型,所以我有点困惑。我几乎不能相信,用可变次数的迭代进行循环是不可能的。我想做一些简单的(i = 1;i <= variableValue;我+ +)。这是目前不可能与“循环”还是我完全偏离轨道?
亲切的问候,
马蒂亚斯
0
答案
这当然是丑陋的。但是,如果在此之前使用generate宏操作符并将迭代宏放入floor()函数中,则可以避免此陷阱。将其赋值给一个新的宏(例如interterations),并将其放入循环操作符中。应该是这样
问候,
塞巴斯蒂安。
谢谢你-这个解决方法帮助了我。把这个问题抛在脑后,又产生了一个新的问题。
前面提到的“循环”操作符在“循环示例”中运行,并根据当前示例中的特殊属性值执行一些操作。这就是为什么我需要将其提取到一个宏中。我的下一个问题是,我需要在循环的第一次运行中做一些特殊的事情。我通常会检查我的count变量或设置一些布尔标志。一个简单的if语句可以区分第一次循环迭代和随后的所有循环迭代。但我有点困惑,这是不可能检查“分支”操作符内的宏值。但是用“if”检查变量值正是我通常会做的。“Branch”只允许检查宏的存在,这对于一个简单的标志来说很有效。但是,由于似乎没有办法取消一个宏一旦被定义,这将只适用于我的第一个例子。我猜有一个(简单的)方法来区分循环迭代,或者有一个特殊的第一次运行,但我不知道。 Sometimes it's still hard to find the right things to do in RapidMiner analog to the things I would directly code in Java. But experience is slowly rising... not least due to your hints and help
再次感谢并致以良好的问候。
马蒂亚斯
不幸的是没有。请帮我一个忙,在bug跟踪器的特性请求列表中添加宏的取消设置操作符以及宏值的条件。
一个不太好的解决方法是:使用记忆/召回操作符在内存中存储一个虚拟对象。这可以被检索和删除。如果检索到但不可用,将抛出异常。如果包装在句柄Exception操作符中,则可以避免在句柄执行操作符中执行以下操作符。
哇。那是非常黑暗的一面。
问候,
塞巴斯蒂安。
顺便说一下:我们在一个项目中也遇到了同样的问题。在当前SVN版本中已添加。
问候,
塞巴斯蒂安。
一个简短的解决方案:在每个循环之前初始化宏“run”为1;在循环中,将这个宏设置为2;现在,您可以在第一次运行时使用选择子流程操作符执行其他操作。 最好的问候,
chero
看来切罗基的变通办法没有塞巴斯蒂安的那么黑暗我甚至没有考虑“Select Subprocess”操作符,因为我以前从未使用过或需要过它。但在这种情况下,它应该是有用的。我选择了另一种方式,简单地将一个flag属性添加到我的第一个示例集中,从这里开始内部循环。不是很好,但一个快速的方法来让我的进程运行::)
Sebastian,你知道当前的SVN版本什么时候会向公众发布吗?
最好的问候,
马蒂亚斯
顺便说一下:宏处理可能需要一些其他的修改。我需要一个循环的迭代计数器变量(因为%{a}不是在每次循环开始时都以1开始)。看起来很简单,在我的“循环”操作符之前“生成宏”,并在循环内通过“设置宏”增加计数。但是后者不允许我使用%{counter}+1这样的值,因为该值被解释为字符串。所以我不得不用“生成宏”覆盖现有的宏,它允许一些功能和计算。如果我在使用“设置宏”时没有完全失败,那么这种不统一的值设置和处理就有点令人困惑了。
事实上,RapidMiner 6.0已经计划对宏提供更好的支持。然后将宏添加到元数据转换中,以允许在gui中检查和选择已经定义的宏…
问候,
塞巴斯蒂安。
听起来不错!
但是现在,我必须再次提到关于Branch和Macros的老故事但这次只是在页边空白处做了一个简短的注释。
我现在使用的是最新版本的RM,带有文本和web扩展(顺便说一下,扩展现在可以通过subversion获得),而subversion已经为Branch操作符实现了“表达式”作为条件类型。我只是无意中选择了条件类型“macro_defined”,并发现了该参数的变化。这个选择不再激活一个文本参数字段,您可以在其中输入相应的宏名称,而是显示一个“io object”选择字段。我猜这不是你想要的,你可能想要解决它。
问候,
马蒂亚斯
非常感谢你的提示。
问候,
塞巴斯蒂安。
正如我刚刚听到的:它已经修好了。
问候,
塞巴斯蒂安。
结果要么保持1,要么以以下结果结束:"eval (eval(1 + 1) + 1)"等等。
我以为eval应该....作为数值计算?
你想干什么?你能把你的流程发给我们吗?
你在使用吗?设置宏或生成的宏?只生成宏计算表达式。你可以在这个过程中看到不同:
问候,
Balazs