Pergunta

Ok, então estou tentando usar as aulas S4 para construir um objeto muito complexo, com slots, incluindo meia dúzia de matrizes, algumas listas e provavelmente uma pia da cozinha ou duas lá. O objeto é inicializado referindo -se e descompactando um objeto de configuração que eu já defini. É fácil o suficiente definir a classe com o setClass (), mas estou tendo dificuldade em descobrir uma maneira elegante de definir os slots no conjunto do setMethod ("Initialize").

O problema é que eu preciso definir elementos específicos dessas matrizes meia dúzia de com base em partes desse objeto de configuração. Para cada elemento do objeto de configuração, talvez seja necessário definir elementos específicos de várias matrizes. Observe que as matrizes estão no escopo/ambiente da função inicialize. Eu então tenho funções aninhadas na função inicializa que fazem a tarefa real às matrizes, ou essa é a ideia de qualquer maneira. Essas funções podem, é claro, Vejo as matrizes, mas elas não podem modificar eles porque o operador <- cria uma nova matriz se a variável original não foi definida no ambiente atual. R é um valor por valor e significa isso. Isso é verdade para os slots do .Object que estou tentando inicializar. Portanto, não posso usar funções aninhadas para fazer a inicialização.

Infelizmente, essas funções aninhadas precisam modificar várias matrizes, portanto, retornar os valores e fazer a atribuição na função de inicialização principal não é prática ou elegante. (Mas é possível, se eu enfiar cópias das matrizes em listas retornadas e depois combiná -las na função de inicialização principal. Porém, feio e exigiria muito código extra.)

E a iteração (que impediria esse problema de escopo) também não é muito prática devido à natureza hierárquica do objeto de configuração, que realmente quer ser atravessado com chamadas recursivas.

A última opção em que posso pensar seria usar a função atribui () com a opção ANVIR para forçar a atribuição a aplicar à variável não local. Mas usar ambientes como esse parece nojento, como uma declaração Goto ...

Então, qual é a abordagem mais pirática? Atenha -se com a programação funcional pura e construa estruturas de dados feias apenas para passar ineficientemente em torno de matrizes redundantes? Tente encontrar uma solução iterativa que evite completamente as funções? Use Deep Magic brincando com ambientes?

Foi útil?

Solução

Você já olhou <<- ? Isso facilita um pouco a atribuição no ambiente pai.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top