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

Rogério Barbosa antrologos em gmail.com
Segunda Agosto 19 17:07:45 BRT 2013


Desculpe... achei um erro. Não resolvi seu problema.

Dentro da função escrevi
 with(my.env$subdata,v1+v2)

Ao invés de:
 with(my.env$subdata,operacao)




2013/8/19 Rogério Barbosa <antrologos em gmail.com>

> 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/fdf572e9/attachment.html>


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