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 <[email protected]> > 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 <[email protected]> > >> 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 <[email protected]> >> >>> 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 <[email protected]> >>> >>>> 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 >>>> [email protected] >>>> 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 >>> [email protected] >>> 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 >> [email protected] >> 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 [email protected] 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.
