[R-br] Passar parâmetro para with() dentro de uma função

Rogério Barbosa antrologos em gmail.com
Segunda Agosto 19 16:57:35 BRT 2013


Olá Rodrigo,

Consegui fazer sua função funcionar -- embora eu mesmo não tenha entendido
bem o método que empreguei... rs

Fato é que já vi diversas vezes o R não lidar bem com a relação
local/global environment. Supus que seu problema era um caso desse. Então
criei um environment dentro da função e atribui a um objeto o conteúdo de
"data". Quando aplico a função with, já faço uso desse objeto dentro do
environment criado.


rm(list=ls())
dados=data.frame(x=1:10,v1=rnorm(10),v2=rnorm(10))

f = function(data,operacao) {
    my.env <- new.env()

    assign("subdata", data, envir=my.env)

    with(my.env$subdata,v1+v2)
    }

f(dados,operacao=v1+v2)


abraço,
Rogério


2013/8/19 Rodrigo Coster <rcoster em gmail.com>

> Fernando,
>
> foi desatenção minha na hora de fazer o exemplo. Segue sem repetir nomes e
> com o problema persistindo.
>
> dados <- data.frame(x=1:10, v1=rnorm(10), v2=rnorm(10))
>
> with(dados, v1+v2)
>
> func <- function(data, funcao) {
>  with(data, funcao)
> }
> func(dados, v1+v2)
> func(dados, 'v1+v2')
>
>
> 2013/8/19 FHRB Toledo <fernandohtoledo em gmail.com>
>
>> Faça:
>>
>> planilha <- data.frame(x=1:10, v1=rnorm(10), v2=rnorm(10))
>>
>> with(planilha, v1+v2) # Fora da função funciona
>>
>> func <- function(dados, func) {
>>  with(dados, func)
>> }
>>
>> func(planilha, v1+v2) # Da erro na hora de chamar a função
>>
>> Talvez seja qq confusão na atribuição de nomes, parâmetros para a função.
>>
>> att,
>> FH
>>
>>
>> 2013/8/19 Rodrigo Coster <rcoster em gmail.com>
>>
>>>  Caros,
>>>
>>> eu tenho uma função que me retorna um data.frame() com várias colunas
>>> que vou utilizar para outros calculos. Eu queria facilitar a minha vida e
>>> colocar esses calculos dentro da função, como um parâmetro (dado que não
>>> existe somente um calculo). Encontrei uma maneira de fazer isso fora da
>>> função pelo with() ou até mesmo evalq(), só que não consegui fazer isso
>>> dentro da função. Eu entendo os erros que dão e concordo com eles, mas não
>>> consegui encontrar uma maneira que funcione.
>>>
>>> Basicamente é isso:
>>>
>>> dados <- data.frame(x=1:10, v1=rnorm(10), v2=rnorm(10))
>>>
>>> with(dados, v1+v2) # Fora da função funciona
>>>
>>> func <- function(data, func) {
>>>  with(dados, func)
>>> }
>>> func(dados, v1+v2) # Da erro na hora de chamar a função
>>> func(dados, 'v1+v2') # Retorna o string
>>>
>>> Alguma sugestão/solução?
>>>
>>> _______________________________________________
>>> R-br mailing list
>>> R-br em listas.c3sl.ufpr.br
>>> https://listas.inf.ufpr.br/cgi-bin/mailman/listinfo/r-br
>>> Leia o guia de postagem (http://www.leg.ufpr.br/r-br-guia) e forneça
>>> código mínimo reproduzível.
>>>
>>
>>
>> _______________________________________________
>> R-br mailing list
>> R-br em listas.c3sl.ufpr.br
>> https://listas.inf.ufpr.br/cgi-bin/mailman/listinfo/r-br
>> Leia o guia de postagem (http://www.leg.ufpr.br/r-br-guia) e forneça
>> código mínimo reproduzível.
>>
>
>
> _______________________________________________
> R-br mailing list
> R-br em listas.c3sl.ufpr.br
> https://listas.inf.ufpr.br/cgi-bin/mailman/listinfo/r-br
> Leia o guia de postagem (http://www.leg.ufpr.br/r-br-guia) e forneça
> código mínimo reproduzível.
>
-------------- Próxima Parte ----------
Um anexo em HTML foi limpo...
URL: <http://listas.inf.ufpr.br/pipermail/r-br/attachments/20130819/2655542c/attachment.html>


Mais detalhes sobre a lista de discussão R-br