[R-br] RES: Criar função para tirar a média entre grupos sob condições dadas

Paulo Nogueira Starzynski paulons em gmail.com
Domingo Janeiro 31 11:48:05 BRST 2016


Alexandre,
a própria mensagem de erro já está contando o que acontece.

Tópicos:

   - sua função tem um argumento *x*, que na chamada você não está passando
    nada...
   - mesmo que passasse algo no *x*, no código da função você faz *x <-
   NULL* e depois *results <- x*, ou seja, *results <- NULL*
   - em seguida, tenta usar a função *any* nesse objeto... não tem nada nele

A própria mensagem de erro já te aponta a direção.
Além do mais, teu código está meio estranho, como eu apontei nos tópicos
acima. Pode ser bom dar uma revisada.


Abraços,
Paulo

Em 30 de janeiro de 2016 18:00, ASANTOS <alexandresantosbr em yahoo.com.br>
escreveu:

> Obrigado Éder,
>
>         Na verdade não tinha atentado a isso, mas agora deu outro erro,
> sendo:
>
> Error in apply(results, 1, function(x) { :
>   dim(X) must have a positive length
> > str(tableFE99)
> Error in head(tableFE99) : objeto 'tableFE99' não encontrado
>
>
>         O CRM que estou usando é:
>
> ### <code r>
> require(RCurl); require(XML)
>
> ##  Função de leitura da tabela
> readFE<- function (x, URL = ""){
> url0 <- URL
> url1 <- gsub("(^.*)(/s/.*)(\\?.*$)", "https://dl.dropboxusercontent.com\\2",
> url0); url1
> page <- getURL(url1)
> classes <- c(rep("factor", 6), rep("numeric", 4), "factor")
> tableFE <- readHTMLTable(page, head=T, colClasses=classes)[[1]]
>      x<-NULL
>      results <- x
>      results <- x
>      results<-results[!apply(results,1,function(x){any(x=="(NULL)")}),]
>      results<-subset(results, !(latitude == "0.00000000" | longitude ==
> "0.00000000"))
>      results
> }
> #--#
>
> ## Tentativa de leitura da tabela
> tableFE99<-readFE(URL=
> "https://www.dropbox.com/s/foeh9oqbiqlawvg/TALHOES_AGENTE2.htm?dl=1"
> <https://www.dropbox.com/s/foeh9oqbiqlawvg/TALHOES_AGENTE2.htm?dl=1>)
> str(tableFE99)
> ### </code>
>
>
>
>
>
>
>
> --
> ======================================================================
> Alexandre dos Santos
> Proteção Florestal
> IFMT - Instituto Federal de Educação, Ciência e Tecnologia de Mato Grosso
> Campus Cáceres
> Caixa Postal 244
> Avenida dos Ramires, s/n
> Bairro: Distrito Industrial
> Cáceres - MT                      CEP: 78.200-000
> Fone: (+55) 65 8132-8112 (TIM)   (+55) 65 9686-6970 (VIVO)e-mails:alexandresantosbr em yahoo.com.br
>         alexandre.santos em cas.ifmt.edu.br
> Lattes: http://lattes.cnpq.br/1360403201088680
> OrcID: orcid.org/0000-0001-8232-6722
> Researchgate: https://www.researchgate.net/profile/Alexandre_Santos10
> LinkedIn: https://br.linkedin.com/in/alexandre-dos-santos-87961635
> ======================================================================
>
> Em 30/01/2016 14:43, Éder Comunello escreveu:
>
> Senhores, boa tarde!
>
> Na forma que sugeri é necessário alterar o link "default" do dropbox pra
> acessar diretamente o arquivo.
>
> ### <code r>
> require(RCurl); require(XML)
> url0 <- "
> https://www.dropbox.com/s/foeh9oqbiqlawvg/TALHOES_AGENTE2.htm?dl=1"
> url1 <- gsub("(^.*)(/s/.*)(\\?.*$)", " <https://dl.dropboxusercontent.com>
> https://dl.dropboxusercontent.com\\2", url0); url1
>
> page <- getURL(url1)
> # page <- getURL(url1, ssl.verifypeer = FALSE)
> classes <- c(rep("factor", 6), rep("numeric", 4), "factor")
> tableFE <- readHTMLTable(page, head=T, colClasses=classes)[[1]]
> str(tableFE)
> ### </code>
>
>> ================================================
> Éder Comunello
> PhD Student in Agricultural Systems Engineering (USP/Esalq)
> Brazilian Agricultural Research Corporation (Embrapa)
> Dourados, MS, Brazil [22 16.5'S, 54 49.0'W]
>
>
>
>
> Em 30 de janeiro de 2016 12:17, Paulo Nogueira Starzynski <
> <paulons em gmail.com>paulons em gmail.com> escreveu:
>
>> Alexandre,
>> no teste que fiz aqui, o problema é na leitura da tabela. A função getURL
>> não está retornando conteúdo que a função readHTMLTable possa extrair.
>>
>> > URL="https://www.dropbox.com/s/foeh9oqbiqlawvg/TALHOES_AGENTE2.htm?dl=1"> page <- RCurl::getURL(URL)> page[1] "<html>\r\n  <head><title>Found</title></head>\r\n  <body>\r\n    <h1>Found</h1>\r\n    <p>The resource was found at <a href=\"https://dl.dropboxusercontent.com/content_link/tkauy9obP7pgxKYpb9j5ZR2LCSUTe2iJpaULTWEN4RzdfR6AtirbNWGtt8q9Ncex/file?dl=1\">https://dl.dropboxusercontent.com/content_link/tkauy9obP7pgxKYpb9j5ZR2LCSUTe2iJpaULTWEN4RzdfR6AtirbNWGtt8q9Ncex/file?dl=1</a>;\r\nyou should be redirected automatically.\r\n\r\n<!--  --></p>\r\n    <hr noshade>\r\n    <div align=\"right\">WSGI Server</div>\r\n  </body>\r\n</ht
>> ml>\r\n"
>>
>>
>> Abraços,
>> Paulo
>>
>> Em 30 de janeiro de 2016 12:16, ASANTOS <alexandresantosbr em yahoo.com.br>
>> escreveu:
>>
>>> Bom dia Éder,
>>>
>>>
>>>        Tentei criar uma função com os comandos de leitura da tabela em
>>> HTML e também não funfou, posso pedir novamente sua ajuda, Obrigado,
>>>
>>>
>>>
>>> ##  Função de leitura da tabela
>>> readFE<- function (x, URL = ""){
>>>
>>> page <- getURL(URL)
>>> classes <- c(rep("factor", 6), rep("numeric", 4), "factor")
>>> tableFE <- readHTMLTable(page, head=T, colClasses=classes)[[1]]
>>>      x<-NULL
>>>      results <- x
>>>      results <- x
>>>      results<-results[!apply(results,1,function(x){any(x=="(NULL)")}),]
>>>      results<-subset(results, !(latitude == "0.00000000" | longitude ==
>>> "0.00000000"))
>>>      results
>>> }
>>> #--#
>>>
>>>
>>>
>>>
>>>
>>> ## Tentativa de leitura da tabela
>>> tableFE<-readFE(URL=
>>> <https://www.dropbox.com/s/foeh9oqbiqlawvg/TALHOES_AGENTE2.htm?dl=1>
>>> "https://www.dropbox.com/s/foeh9oqbiqlawvg/TALHOES_AGENTE2.htm?dl=1"
>>> <https://www.dropbox.com/s/foeh9oqbiqlawvg/TALHOES_AGENTE2.htm?dl=1>)
>>> head(tableFE)
>>> #---------------
>>>
>>>
>>>
>>>
>>> --
>>> ======================================================================
>>> Alexandre dos Santos
>>> Proteção Florestal
>>> IFMT - Instituto Federal de Educação, Ciência e Tecnologia de Mato Grosso
>>> Campus Cáceres
>>> Caixa Postal 244
>>> Avenida dos Ramires, s/n
>>> Bairro: Distrito Industrial
>>> Cáceres - MT                      CEP: 78.200-000
>>> Fone: (+55) 65 8132-8112 (TIM)   (+55) 65 9686-6970 (VIVO)e-mails:alexandresantosbr em yahoo.com.br
>>>         alexandre.santos em cas.ifmt.edu.br
>>> Lattes: http://lattes.cnpq.br/1360403201088680
>>> OrcID: orcid.org/0000-0001-8232-6722
>>> Researchgate: https://www.researchgate.net/profile/Alexandre_Santos10
>>> LinkedIn: https://br.linkedin.com/in/alexandre-dos-santos-87961635
>>> ======================================================================
>>>
>>> Em 29/01/2016 08:41, Éder Comunello escreveu:
>>>
>>> Alexandre, bom dia!
>>>
>>> Não havia atentado para o problema na importação das tabelas, sendo
>>> necessário definir as classes. Além disso, na função você deve se referir a
>>> "db" antes que "tableFE" e  "x" é definido internamente por lapply().
>>>
>>>
>>> ### <code r>
>>> require(RCurl); require(XML)
>>> url0 <- "
>>> <https://www.dropbox.com/s/znmr0lwda2y6fc5/BD_teste2.html?dl=1>
>>> https://www.dropbox.com/s/znmr0lwda2y6fc5/BD_teste2.html?dl=1"
>>> url1 <- gsub("(^.*)(/s/.*)(\\?.*$)", "
>>> <https://dl.dropboxusercontent.com>https://dl.dropboxusercontent.com\\2",
>>> url0); url1
>>> # [1] "
>>> <https://dl.dropboxusercontent.com/s/znmr0lwda2y6fc5/BD_teste2.html>
>>> https://dl.dropboxusercontent.com/s/znmr0lwda2y6fc5/BD_teste2.html"
>>>
>>> page <- getURL(url1)
>>> tableFE <- readHTMLTable(page, head=T)[[1]]
>>> str(tableFE) ### todas variáveis estão como fatores - corrigir!
>>>
>>> classes <- c(rep("factor", 6), rep("numeric", 4), "factor")
>>> tableFE <- readHTMLTable(page, head=T, colClasses=classes)[[1]]
>>> str(tableFE) ### OK!
>>> head(tableFE)
>>>
>>> ##Agregando os resultados
>>> aggPestFE <- function(db=tableFE, key="descricao"){
>>> lista  <- split(db, db[key])
>>> result <- lapply(lista, function(x) aggregate(x[,7:8],
>>> by=list(x[,3],x[,2],x[,5]), mean))
>>> return(result)
>>> }
>>>
>>> ### Devido aos "defaults", obtém mesmos resultados nas três formas que
>>> seguem:
>>> aggPestFE()[5]
>>> aggPestFE(tableFE)[5]
>>> aggPestFE(tableFE, "descricao")[5]
>>> # $`Lagartas Desfolhadoras`
>>> #   Group.1           Group.2 Group.3 formiga_area qtd_destruido
>>> # 1      GN             Chale      26            0          62.5
>>> # 2      RD Corrego da Coruja      26            0          50.0
>>> # 3      GN      Aeroporto II      28            0          75.0
>>>
>>> ### </code>
>>>
>>>>>> ================================================
>>> Éder Comunello
>>> PhD Student in Agricultural Systems Engineering (USP/Esalq)
>>> Brazilian Agricultural Research Corporation (Embrapa)
>>> Dourados, MS, Brazil [22 16.5'S, 54 49.0'W]
>>>
>>>
>>>
>>>
>>>
>>> _______________________________________________
>>> 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 listR-br em listas.c3sl.ufpr.brhttps://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/20160131/6bcaf15c/attachment-0001.html>


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