lageIBUSP / notaR-r

Pacote em R para uso no sistema notaR - https://github.com/lageIBUSP/notaR
0 stars 0 forks source link

Corrigir exercícios com gráficos #6

Open andrechalom opened 6 years ago

andrechalom commented 6 years ago

É possível corrigir exercícios que pedem a geração de um gráfico? @raspereira sugeriu a função recordPlot(), preciso verificar.

adalardo commented 6 years ago

Olás,

Uma possível solução é encapsular o script em um dispositivo de arquivo em um formato especifico de raster, png por exemplo, e fazermos o teste lógico no arquivo de imagem lido pelo pacote png. No caso de um png colorido, ele é lido como um array com as 2 primeiras dimensões representando a posição dos pixels (linha e colunas) e a 3 a escala RGB para cada pixel. Parece um formato simples para fazermos testes lógicos.

Veja o exemplo abaixo:

png("myplot.png") ## precisa abrir o dispositivo de arquivo antes do script

aqui comeca o script do aluno

plot(1:10) rect(xleft=1, ybottom=5, xright=3, ytop=7, col="red") rect(xleft=1:5,ybottom=2:6, xright=(1:5)+4, ytop=(2:6)+2, col=1:5) points(1:10, 1:10, pch=16)

aqui termina

dev.off() ## fecha o dispositivo ativo para salvar o png no diretorio de trabalho

lendo o arquivo e comparando

library(png)

lendo a imagem do script

img1 <- readPNG("myplot.png") str(img1)

lendo a imagem base (aqui precisamos ler a imagem base do grafico

correto! img2 <- readPNG("myplot.png") str(img2)

comparando a camada R (Rgb) das imagens

table(img1[,,1] == img2[,,]

Alexandre Adalardo de Oliveira Professor Doutor Universidade de São Paulo IB-Depto Ecologia http://labtrop.ib.usp.br http://ecologia.ib.usp.br/labtrop adalardo@usp.br


aleadalardo@gmail.com http://scholar.google.com.br/citations?user=O1gcrwIAAAAJ&hl=pt-BR

2018-04-24 20:57 GMT-03:00 Andre Chalom notifications@github.com:

É possível corrigir exercícios que pedem a geração de um gráfico? @raspereira https://github.com/raspereira sugeriu a função recordPlot(), preciso verificar.

— You are receiving this because you are subscribed to this thread. Reply to this email directly, view it on GitHub https://github.com/lageIBUSP/notaR-r/issues/6, or mute the thread https://github.com/notifications/unsubscribe-auth/AHRIdfnOCe4fwBpL3q80MF6LntJ0JBGyks5tr7v8gaJpZM4Til1R .

raspereira commented 6 years ago

Olá pessoal, Interessante a sugestão do Alê, pois podemos testar itens específicos no grafico (cor p. ex.). Eu estou fazendo testes com a função recordPlot(). O legal dessa função é que ela salva em um objeto um gráfico feito na interface gráfica. No entanto a comparação de gráficos muito parecidos está falhando pelo menos para os histogramas. Enfim, vários caminhos estão surgindo... Veja  exemplo abaixo: x<-rpois(1000, 5)boxplot(x)boxplot(x) # não saquei o porquê, mas tem que repetir o comando para funcionar!p <- recordPlot()  boxplot(x)p.control<-recordPlot() identical(p, p.control) 

Refazendo o sorteio vai dá FALSE, como esperado.x<-rpois(1000, 5)boxplot(x)boxplot(x)p <- recordPlot() 

x<-rpois(1000, 5)boxplot(x)p.control<-recordPlot() identical(p, p.control) 

Abraços,

Rodrigo A. S. Pereira Depto de Biologia/FFCLRP-USP Av. Bandeirantes, 3900 14040-901 - Ribeirão Preto, SP Fone: +55 16 3315-4678 Fax: +55 16 3315-9101 http://sites.ffclrp.usp.br/ficus/

Em quarta-feira, 2 de maio de 2018 15:21:28 BRT, Alexandre Adalardo <notifications@github.com> escreveu:  

Olás,

Uma possível solução é encapsular o script em um dispositivo de arquivo em um formato especifico de raster, png por exemplo, e fazermos o teste lógico no arquivo de imagem lido pelo pacote png. No caso de um png colorido, ele é lido como um array com as 2 primeiras dimensões representando a posição dos pixels (linha e colunas) e a 3 a escala RGB para cada pixel. Parece um formato simples para fazermos testes lógicos.

Veja o exemplo abaixo:

png("myplot.png") ## precisa abrir o dispositivo de arquivo antes do script

aqui comeca o script do aluno

plot(1:10) rect(xleft=1, ybottom=5, xright=3, ytop=7, col="red") rect(xleft=1:5,ybottom=2:6, xright=(1:5)+4, ytop=(2:6)+2, col=1:5) points(1:10, 1:10, pch=16)

aqui termina

dev.off() ## fecha o dispositivo ativo para salvar o png no diretorio de trabalho

lendo o arquivo e comparando

library(png)

lendo a imagem do script

img1 <- readPNG("myplot.png") str(img1)

lendo a imagem base (aqui precisamos ler a imagem base do grafico

correto! img2 <- readPNG("myplot.png") str(img2)

comparando a camada R (Rgb) das imagens

table(img1[,,1] == img2[,,]

Alexandre Adalardo de Oliveira Professor Doutor Universidade de São Paulo IB-Depto Ecologia http://labtrop.ib.usp.br http://ecologia.ib.usp.br/labtrop adalardo@usp.br


aleadalardo@gmail.com http://scholar.google.com.br/citations?user=O1gcrwIAAAAJ&hl=pt-BR

2018-04-24 20:57 GMT-03:00 Andre Chalom notifications@github.com:

É possível corrigir exercícios que pedem a geração de um gráfico? @raspereira https://github.com/raspereira sugeriu a função recordPlot(), preciso verificar.

— You are receiving this because you are subscribed to this thread. Reply to this email directly, view it on GitHub https://github.com/lageIBUSP/notaR-r/issues/6, or mute the thread https://github.com/notifications/unsubscribe-auth/AHRIdfnOCe4fwBpL3q80MF6LntJ0JBGyks5tr7v8gaJpZM4Til1R .

— You are receiving this because you were mentioned. Reply to this email directly, view it on GitHub, or mute the thread.

raspereira commented 6 years ago

Olá pessoal, Tenho uma dúvida e um problema. 1) Qual é a sequencia de execução das rotinas pelo notaR? Executa primeiro as "Precondições", depois a resposta do aluno e por último os "Testes"?

2) Estou testando a função p<-recordPlot(). Percebi que o objeto (p por ex.) criado quando o dispositivo gráfico tá fechado é diferente do objeto criado quando a janela gráfica já tá aberta. A solução é sempre fechar o dispositivo gráfico antes de fazer um novo gráfico. No entanto não estou conseguindo implementar isso no notaR (exercício 301.2).

Experimentei colocar fazer os gráficos "gabarito" na Precondição ou no Testes. Em ambos está havendo falhas. Alguém tem alguma dica de como resolver isso? Estou anexando o conjunto de dados do exercício. alunos2018.txt

Submeto o código resposta abaixo (fazendo um gráfico diferente do pedido) e o teste falha em detectar o erro:

alunos<-read.delim2("alunos2018.txt") hist(alunos$Peso) # Estou fazendo o grafico de Peso e não de Altura, como pedido pa<-recordPlot() dev.off()

Abraços,

Rodrigo

adalardo commented 6 years ago

Oi Rodrigo,

Como respondi no seu email o Chalom pode ajudar mais com isso. De qq forma, os arquivos que fazem parte de condições devem se incluídos pela aba "Arquivos" no meu à direita do notaR. Eles ficam disponíveis para todos os exercícios. Acho que o png do "gabarito" deveria entrar aqui!

Abs A.

Alexandre Adalardo de Oliveira Professor Doutor Universidade de São Paulo IB-Depto Ecologia http://labtrop.ib.usp.br http://ecologia.ib.usp.br/labtrop adalardo@usp.br


aleadalardo@gmail.com http://scholar.google.com.br/citations?user=O1gcrwIAAAAJ&hl=pt-BR

Em 20 de maio de 2018 23:26, raspereira notifications@github.com escreveu:

Olá pessoal, Tenho uma dúvida e um problema.

1.

Qual é a sequencia de execução das rotinas pelo notaR? Executa primeiro as "Precondições", depois a resposta do aluno e por último os "Testes"? 2.

Estou testando a função p<-recordPlot(). Percebi que o objeto (p por ex.) criado quando o dispositivo gráfico tá fechado é diferente do objeto criado quando a janela gráfica já tá aberta. A solução é sempre fechar o dispositivo gráfico antes de fazer um novo gráfico. No entanto não estou conseguindo implementar isso no notaR (exercício 301.2).

Experimentei colocar fazer os gráficos "gabarito" na Precondição ou no Testes. Em ambos está havendo falhas. Alguém tem alguma dica de como resolver isso? Estou anexando o conjunto de dados do exercício. alunos2018.txt https://github.com/lageIBUSP/notaR-r/files/2021005/alunos2018.txt

Abraços,

Rodrigo

— You are receiving this because you commented. Reply to this email directly, view it on GitHub https://github.com/lageIBUSP/notaR-r/issues/6#issuecomment-390536353, or mute the thread https://github.com/notifications/unsubscribe-auth/AHRIdYpVG_t4-VHFHwPiSqsYlAGmfz_Lks5t0iW_gaJpZM4Til1R .

raspereira commented 6 years ago

É uma possibilidade interessante. Eu estava pensando em criar o gabarito na Precondição para não poluir os "Arquivos" com coisas que não sejam arquivos de dados originais. Se for possível criar nas precondições acho que fica mais flexível caso deseje substituir o arquivo de dados de um ano para o outro. Por ex. no exercício que quero fazer vou usar a altura e peso dos alunos da turma.

Abraços, rodrigo

adalardo commented 6 years ago

Entendi. Nesse caso parece melhor. D qq forma vai precisar atualizar as pré-condições todos os anos para incluir dados da turma. Uma alternativa seja a pre-condicao ler direto de um arquivo do Google drive...

Em Ter, 22 de mai de 2018 17:58, raspereira notifications@github.com escreveu:

É uma possibilidade interessante. Eu estava pensando em criar o gabarito na Precondição para não poluir os "Arquivos" com coisas que não sejam arquivos de dados originais. Se for possível criar nas precondições acho que fica mais flexível caso deseje substituir o arquivo de dados de um ano para o outro. Por ex. no exercício que quero fazer vou usar a altura e peso dos alunos da turma.

Abraços, rodrigo

— You are receiving this because you commented. Reply to this email directly, view it on GitHub https://github.com/lageIBUSP/notaR-r/issues/6#issuecomment-391138524, or mute the thread https://github.com/notifications/unsubscribe-auth/AHRIdaniH0j2sbGcqAiz3Qk-8TLRwa_Iks5t1Hv4gaJpZM4Til1R .

andrechalom commented 6 years ago

Oi, Rodrigo!

Qual é a sequencia de execução das rotinas pelo notaR? Executa primeiro as "Precondições", depois a resposta do aluno e por último os "Testes"?

Correto! Essa é a ordem atual, e a proposta é para continuarmos fazendo essa ordem.

Vi que vc subiu o arquivo alunos2018.txt para o servidor, e eu instalei a library de "png", agora deve dar pra vc continuar seus testes.

Abraços!

raspereira commented 6 years ago

Oi @andrechalom @adalardo ,

Bingo, tá funcionando! Mas a função hist é mala. Por default ela coloca o nome do vetor como título do gráfico. Assim, o nome do arquivo gabarito e do aluno tem que ter nomes iguais ou o enunciado pedir para o aluno mudar o título (main=) do gráfico. A solução que optei é deixar o script do aluno sobrescrever o objeto de dados da Precondição...

Abraços e obrigado!

andrechalom commented 6 years ago

Achei por acaso esse pacote, talvez seja um bom começo!!

https://github.com/MangoTheCat/visualTest

raspereira commented 6 years ago

Valeu André, vou examinar. Abraços

Rodrigo A. S. Pereira Depto de Biologia/FFCLRP-USP Av. Bandeirantes, 3900 14040-901 - Ribeirão Preto, SP Fone: +55 16 3315-4678 Fax: +55 16 3315-9101 http://sites.ffclrp.usp.br/ficus/

Em terça-feira, 28 de agosto de 2018 13:44:29 BRT, Andre Chalom <notifications@github.com> escreveu:  

Achei por acaso esse pacote, talvez seja um bom começo!!

https://github.com/MangoTheCat/visualTest

— You are receiving this because you were mentioned. Reply to this email directly, view it on GitHub, or mute the thread.

| | Livre de vírus. www.avast.com. |