[R-br] parâmetro com variavel não definida

Rodrigo Coster rcoster em gmail.com
Quinta Junho 5 12:41:23 BRT 2014


Da para fazer assim:

calcula_matriz <- function (A = rbind(c( p + 8, 3), c( 5, p - 1)), limite)
{
for (p in 1:limite ) {
print(A)
}
}
calcula_matriz(limite = 1)


Mas se A tiver sempre o mesmo formato, não precisa ser parâmetro:

calcula_matriz <- function (limite) {
for (p in 1:limite ) {
print (rbind(c( p + 8, 3), c( 5, p - 1)))
}
}

calcula_matriz(limite = 1)


Ainda, se A tiver vários formatos diferentes, da para usar uma gambiarra:

calcula_matriz <- function (A = 'rbind(c( p + 8, 3), c( 5, p - 1))',
limite) {
for (p in 1:limite ) {
print(eval(parse(text=A)))
}
}
calcula_matriz(limite = 1)


Note que agora A é texto (ta entre aspas), e não mais uma expressão do R.
Assim tu pode fazer:

calcula_matriz(A = 'rbind(c(p, 1/p), c(p ^ 2, log(p)))', limite = 1)


2014-06-05 12:26 GMT-03:00 Waldelene Moura <waldelene em yahoo.com.br>:

> Oi Rodrigo  entendi um pouco o que voce disse, mas nao consegui juntar com
> a construção da minha matriz, ja que é ela  o parâmetro da função.
>
>  Estou fazendo  umas funções no meu mestrado na area de controle em que
> preciso passar matrizes com incertezas politópicas,  como parametros,, no
> caso as incertezas é a variável p, entro tambem com a variação dessas
> incertezas np exemplo abaixo chamei de limite,,,
>
> vou detalhar um pouco mais uma função bem modesta  para voce me ajudar e
> dizer onde  posso aproveitar sua sugestão.
>
>
> -----    programa principal  -----------------------------------------
>
> limite = 3                              #  da o limite de p , no caso p
> vai variar de 1  a  4  (verifique que eu não defini a variável p)
> A =  rbind ( c( p + 8 ,     3),
>                   c( 5      , p - 1)
>
> calcula_matriz(A, limite)         #  chamada da função
>
> ------   agora a funcão --------
>
> calcula_matriz <-   function (A, limite) {
>    for ( p in 1 : limite ) {                 #  só aqui definir p
>        print (A)
>    }
> }
>
> ------------------------------------------------------------------
> O resultado seria:
>
> para p = 1           A = [9   3;  5  0]
> para p = 2           A = [10  3;  5  1]
> para p = 3           A = [11  3;  5  2]
>
> agradeço  a  quem puder ajudar,
>
> Waldelene Moura
> Analista de Sistemas
> Universidade Federal do Maranhão - PROEN
>
>
>
>   Em Quinta-feira, 5 de Junho de 2014 11:39, Rodrigo Coster <
> rcoster em gmail.com> escreveu:
>
>
> Waldelene,
>
> O que da pra fazer é definir o valor do parâmetro como padrão. Por exemplo:
>
> calcular_matrizes <- function(x = p + 2) {
> p <- rnorm(1)
>  return(x)
> }
> calcular_matrizes()
>
> Ele só vai executar o 'x = p + 2' quando a variável x for chamada, que
> ocorre somente depois de definir o valor de p.
>
>
>
> 2014-06-05 11:27 GMT-03:00 Waldelene Moura <waldelene em yahoo.com.br>:
>
>
> Olá pessoal, se alguem puder me ajudar nesse problema agradeço.
>
> É o seguinte
>
> Preciso passar como parâmetro de uma função uma matriz que possui nos
> seus
> elementos uma variável p,  sendo que essa variável p só vai assumir
> valores dentro da função
> chamada, exemplo,
>
>
> A = cbind(c(p+5, 6),
>                c(10, p+8))
>
> calcular_matrizes (A)
>
>
> dentro da função calcular_matrizes tenho que achar valores para essa
> matriz para varios valores de p
>
> A pergunta é, como passar esse parâmetro, no caso a matriz A na função,
> sem dar erro de que a variável p não foi definida? (object 'p' not found).
>
> Waldelene Moura
> Analista de Sistemas
> Universidade Federal do Maranhão - PROEN
>
>
> _______________________________________________
> 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/20140605/b87cafe2/attachment.html>


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