
O problema não é na seleção, e sim na precisão numérica. Dificilmente vc conseguirá comparar um número armazenado como double com outro número que não seja _exatamente_ igual a ele. Lembre-se que o 0.001 que vc vê está armazenado internamente com uma precisão muito maior. Vc pode verificar isso com:
.Machine$double.eps [1] 2.220446e-16
typeof(xyz$y) [1] "double"
E veja também a FAQ http://cran.r-project.org/doc/FAQ/R-FAQ.html#Why-doesn_0027t-R-think-these-n... Uma solução para contornar esse problema seria testar se um valor é igual a 0.001 através da função all.equal() que tem uma tolerância para esses números serem iguais:
xyz$y[1] == 0.001 [1] FALSE all.equal(xyz$y[1], 0.001) [1] TRUE
Uma solução pra fazer o que vc quer seria: f <- function(x){ isTRUE(all.equal(x, 0.001)) } idx <- sapply(xyz$y, f) xyz[idx,] []s, --- Fernando Mayer Universidade Federal de Santa Catarina - UFSC Departamento de Ecologia e Zoologia - ECZ/CCB URL: http://sites.google.com/site/fernandomayer e-mail: fernandomayer [@] gmail.com 2012/4/12 Tiago Vieira <tiagovieira7@yahoo.com.br>:
Frederico, o erro persiste:
fxy <- function(x,y) exp(y/x) x <- seq(0.1, 0.5, l=101) y <- seq(min(x^3), max(x^2), l=101) z <- seq(0, max(fxy(x,y)), l=101) xyz <- expand.grid(x=x,y=y,z=z) head(xyz) x y z 1 0.100 0.001 0 2 0.104 0.001 0 3 0.108 0.001 0 4 0.112 0.001 0 5 0.116 0.001 0 6 0.120 0.001 0 subset(xyz, y==0.001, select=c(x,z)) [1] x z
<0 rows> (or 0-length row.names)
De: Frederico Stienmetz Alvarez <eng.fredericoalvarez@gmail.com>
Para: r-br@listas.c3sl.ufpr.br; Tiago Vieira <tiagovieira7@yahoo.com.br> Enviadas: Quinta-feira, 12 de Abril de 2012 16:03
Assunto: Re: [R-br] Erro em subset
Boa tarde.
Experimentou colocar os dados a serem selecionados no seu subset?
subset(xyz, y == 0.001, select = 'campo de interesse')
Em 12 de abril de 2012 14:07, Tiago Vieira <tiagovieira7@yahoo.com.br> escreveu:
Caros Colegas de R,
Minha dúvida parece ser simples: Eu gero um data.frame, visualizo um valor em uma coluna e quando peço para filtrar todas as linhas em que esta coluna apresenta este valor é retornado que não há linhas. Tente dois métodos de subset e o erro persiste. Já bati muito a cabeça e não acho razões para este erro. Abaixo segue os comando e, desde já, agradeço a atenção.
fxy <- function(x,y) exp(y/x) x <- seq(0.1, 0.5, l=101) y <- seq(min(x^3), max(x^2), l=101) z <- seq(0, max(fxy(x,y)), l=101) xyz <- expand.grid(x=x,y=y,z=z) head(xyz) x y z 1 0.100 0.001 0 2 0.104 0.001 0 3 0.108 0.001 0 4 0.112 0.001 0 5 0.116 0.001 0 6 0.120 0.001 0 xyz[xyz$y==0.001,] [1] x y z <0 rows> (or 0-length row.names) subset(xyz, y==0.001) [1] x y z <0 rows> (or 0-length row.names)
Att, Tiago Vieira.
_______________________________________________ R-br mailing list R-br@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.
-- Frederico Steinmetz Alvarez Engenheiro de Produção Elétrica Mestrando em Energia Eólica Laboratório Didático Pedagógico de Fluidos - LDPFLU Departamento de Engenharia Mecânica - DEMEC Universidade Federal de Pernambuco - UFPE (81) 8885-1105 (Oi) (48) 9143-5141 (Vivo)
_______________________________________________ R-br mailing list R-br@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.