OK,所以我试图用S4类来建立一个非常复杂的对象,插槽包括半打矩阵,几个列表,并可能是一个厨房水槽或两个在那里。该目的是通过参照和拆包其中我已经定义的配置对象初始化。这是很容易定义与setClass()类的,但我有困难,找出在使用setMethod设置插槽(“初始化”)的一种优雅的方式。

的问题是,需要设置基于该配置对象的部分的那些半打矩阵的特定元素。对于配置对象的每个元件,我可能需要设置的几个矩阵的特定元素。请注意,矩阵是在初始化函数的范围/环境。然后我从做实际分配矩阵中的初始化函数中嵌套函数,或者是想法呢。这些功能当然可以矩阵,但也不能修改它们,因为< - 操作者创建如果原始变量未在当前环境中定义一个新的矩阵。 R是通过噪声值,以及装置它。这是.Object的插槽我想初始化甚至真。所以我不能使用嵌套函数来完成初始化。

不幸的是,这些嵌套函数必须修改若干矩阵,所以返回值,并做在主初始化函数的分配是不实际的或优雅。 (但它是可能的,如果我塞进矩阵的拷贝到返回的列表,然后在主初始化函数将它们结合在一起。丑陋的,虽然,将需要大量的额外代码。)

和迭代(这将阻止这个范围界定问题)是不是很实用,因为任何的配置对象,从而真正希望与递归调用遍历的分层特性。

我能想到的最后的选择是使用assign()函数与ENVIR选项强制分配给适用于非本地变量。但是,使用环境,如,似乎恶心,像goto语句...

那么,什么是最海盗的做法?棍用纯功能的编程和编译难看的数据结构只是为了低效绕过冗余矩阵?试图找到完全避免了功能的迭代的解决方案?通过与环境发挥使用魔渊?

有帮助吗?

解决方案

你看着<<-?它使分配在父环境更容易一些。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top