How to fix the R/exams error "could not find function answerlist" - r-exams

I have created an R/exams question in R/Markdown format. When I try to compile and then take it to exams2moodle and / or exams2pdf, I get the following error message:
Error in answerlist (questions, markup = "markdown"): could not find function answerlist.
The exercise is:
```{r, data generation, echo = FALSE, results = "hide"}
#1a.GENERACION DE DATOS. ASIGNACION/DEFINICION DE VARIABLES. CUELLO
a1<-sample(seq(from = 100, to = 250, by = 2), 10)
casilla1<-min(a1)
casilla2<-max(a1)
increm<-casilla2-casilla1
a2<-sample(seq(from = casilla2, to = casilla2+increm, by = 2))
casilla3<-min(a2)
casilla4<-max(a2)
a3<-sample(seq(from = casilla4, to = casilla4+increm, by = 2))
casilla5<-min(a3)
casilla6<-max(a3)
#1b.GENERACION DE DATOS. ASIGNACION/DEFINICION DE VARIABLES. CUERPO
crpizq<-casilla6*1.5
c1<-sample(seq(from = crpizq, to = crpizq+increm, by = 2))
casilla7<-min(c1)
casilla8<-max(c1)
c2<-sample(seq(from = casilla8, to = casilla8+increm, by = 2))
casilla9<-min(c2)
casilla10<-max(c2)
c3<-sample(seq(from = casilla10, to = casilla10+increm, by = 2))
casilla11<-min(c3)
casilla12<-max(c3)
#1c.GENERACION DE DATOS. ASIGNACION/DEFINICION DE VARIABLES. PRECIO
precio1<-sample(seq(from=20000, to=40000, by=500), 1)
precio2<-precio1+15000
precio3<-precio2+15000
preciopregunta<-sample(c(precio1,precio2,precio3), 1)
#2a.GENERACION DE PREGUNTA(S)/RESPUESTA(S). ASIGNACION/DEFINICION DE VARIABLES
cuellop1<-sample(seq(from = casilla1,to = casilla2-1, by = 2), 1)
cuerpop1<-sample(seq(from = casilla7,to = casilla8-1, by = 2), 1)
cuellop2<-sample(seq(from = casilla3,to = casilla4-1, by = 2), 1)
cuerpop2<-sample(seq(from = casilla9,to = casilla10-1, by = 2), 1)
cuellop3<-sample(seq(from = casilla5,to = casilla6-1, by = 2), 1)
cuerpop3<-sample(seq(from = casilla11,to = casilla12-1, by = 2), 1)
questions<-solutions<-explanations<-NULL
if(preciopregunta==precio1) {
questions[1]<-paste("Vasija de " ,cuellop1, " mm en contorno de cuello y ",
cuerpop1, " mm en contorno de cuerpo.")
solutions[1]<-TRUE
explanations[1]<-"."
questions[2]<-paste("Vasija de " ,cuellop1, " mm en contorno de cuello y ",
cuerpop2, " mm en contorno de cuerpo.")
solutions[2]<-FALSE
explanations[2]<-"."
questions[3]<-paste("Vasija de " ,cuellop2, " mm en contorno de cuello y ",
cuerpop3, " mm en contorno de cuerpo.")
solutions[3]<-FALSE
explanations[3]<-"."
questions[4]<-paste("Vasija de " ,casilla1, " mm en contorno de cuello y ",
casilla8, " mm en contorno de cuerpo.")
solutions[4]<-FALSE
explanations[4]<-"."
orden<-sample(1:4)
questions<-questions[orden]
solutions<-solutions[orden]
explanations<-explanations[orden]
} else if (preciopregunta==precio2) {
questions[1]<-paste("Vasija de " ,cuellop2, " mm en contorno de cuello y ",
cuerpop2, " mm en contorno de cuerpo.")
solutions[1]<-TRUE
explanations[1]<-"."
questions[2]<-paste("Vasija de " ,cuellop1, " mm en contorno de cuello y ",
cuerpop2, " mm en contorno de cuerpo.")
solutions[2]<-FALSE
explanations[2]<-"."
questions[3]<-paste("Vasija de " ,cuellop2, " mm en contorno de cuello y ",
cuerpop3, " mm en contorno de cuerpo.")
solutions[3]<-FALSE
explanations[3]<-"."
questions[4]<-paste("Vasija de " ,casilla3, " mm en contorno de cuello y ",
casilla10, " mm en contorno de cuerpo.")
solutions[4]<-FALSE
explanations[4]<-"."
orden<-sample(1:4)
questions<-questions[orden]
solutions<-solutions[orden]
explanations<-explanations[orden]
} else {
questions[1]<-paste("Vasija de " ,cuellop3, " mm en contorno de cuello y ",
cuerpop3, " mm en contorno de cuerpo.")
solutions[1]<-TRUE
explanations[1]<-"."
questions[2]<-paste("Vasija de " ,cuellop1, " mm en contorno de cuello y ",
cuerpop2, " mm en contorno de cuerpo.")
solutions[2]<-FALSE
explanations[2]<-"."
questions[3]<-paste("Vasija de " ,cuellop2, " mm en contorno de cuello y ",
cuerpop3, " mm en contorno de cuerpo.")
solutions[3]<-FALSE
explanations[3]<-"."
questions[4]<-paste("Vasija de " ,casilla5, " mm en contorno de cuello y ",
casilla12, " mm en contorno de cuerpo.")
solutions[4]<-FALSE
explanations[4]<-"."
orden<-sample(1:4)
questions<-questions[orden]
solutions<-solutions[orden]
explanations<-explanations[orden] }
```
The table shows the relationship between prices and measurements that an artisan handles in the sale of vessels:
| Contorno del cuello (mm) | Contorno del cuerpo (mm) | Precio |
|:-------------------------------------:|:---------------------------------------:|:-------------------:|
| [**`r casilla1`** , **`r casilla2`**) | [**`r casilla7`** , **`r casilla8`**) | $\$$**`r precio1`** |
| [**`r casilla3`** , **`r casilla4`**) | [**`r casilla9`** , **`r casilla10`**) | $\$$**`r precio2`** |
| [**`r casilla5`** , **`r casilla6`**) | [**`r casilla11`** , **`r casilla12`**) | $\$$**`r precio3`** |
Question
========
Which of the following pots has a price of $\$$**`r preciopregunta`**?
```{r, questionlist, echo = FALSE, results = "asis"}
answerlist(questions, markup = "markdown")
```
Solution
========
```{r, solutionlist, echo = FALSE, results = "asis"}
answerlist(ifelse(solutions,"True","False"),explanations, markup = "markdown")
```
Meta-information
================
extype: schoice
exsolution:`r mchoice2string(solutions)`
exname: Vas

I cannot replicate this problem using the exercise you provided, for me the code works. You should move the text with the table into the Question section, though.
What might have caused the problem is that you did not fully load and attach the R package exams via library("exams") and only used the fully-qualified exams::exams2pdf(...) without attaching the package. If so, then you also need the fully-qualified exams::answerlist(...) and exams::mchoice2string(...) etc. to use the functions from the package. (Personally, I load and attach the package with library("exams") before compiling any exercises.)

Related

Edit boxplot tooltip text (Plotly)

How can I edit native tooltip text (median, mean, lower fence, upper fence, q1, etc) from boxplot in R code?
I tried using the locale option of the config function, but I didn’t get the expected result when locale = "pt-br". The translation of the boxplot elements is not happening as expected for the Portuguese language.
Code ex:
library(plotly)
fig <- plot_ly(x = ~rnorm(50), type = "box",
hoverinfo = 'x')
fig |>
config(locale = "pt-br")
Other example:
fig <- plot_ly(x = ~rnorm(50), type = "box")
fig |> config(locale = "pt-br")
Note that it works for another language/locale.
fig |> config(locale = "ja") #locale = "es"
I think the easiest way to deal with this is to update your local Plotly package.
If you're worried about something going wrong with the package or if something actually did go wrong, you could reset everything you did just by running install.packages('plotly'). This updates it to the latest CRAN version. If you update Plotly for any reason, it will erase these changes.
To make the change, go to your R library (find the folder address with .Library in the R or RStudio console). For example, mine is [1] "/Library/Frameworks/R.framework/Resources/library". Go to the plotly folder -> htmlwidgets -> lib -> plotlyjs -> locales -> and open pt-br.js. (It will open with RStudio, Atom, and many other IDEs).
Delete everything in the file and replace it with this:
var locale = {
moduleType: "locale",
name: "pt-br",
dictionary: {
Autoscale: "Escala autom\xe1tica",
"Box Select": "Sele\xe7\xe3o retangular",
"Click to enter Colorscale title": "Clique para editar o t\xedtulo da escala de cor",
"Click to enter Component A title": "Clique para editar o t\xedtulo do Componente A",
"Click to enter Component B title": "Clique para editar o t\xedtulo do Componente B",
"Click to enter Component C title": "Clique para editar o t\xedtulo do Componente C",
"Click to enter Plot title": "Clique para editar o t\xedtulo do Gr\xe1fico",
"Click to enter X axis title": "Clique para editar o t\xedtulo do eixo X",
"Click to enter Y axis title": "Clique para editar o t\xedtulo do eixo Y",
"Click to enter radial axis title": "Clique para editar o t\xedtulo do eixo radial",
"Compare data on hover": "Comparar dados ao pairar",
"Double-click on legend to isolate one trace": "Duplo clique na legenda para isolar uma s\xe9rie",
"Double-click to zoom back out": "Duplo clique para reverter zoom",
"Download plot as a png": "Fazer download do gr\xe1fico como imagem (png)",
"Download plot": "Fazer download do gr\xe1fico",
"Edit in Chart Studio": "Editar no Chart Studio",
"IE only supports svg. Changing format to svg.": "IE suporta apenas svg. Alterando formato para svg",
"Lasso Select": "Sele\xe7\xe3o de la\xe7o",
"Orbital rotation": "Rota\xe7\xe3o orbital",
Pan: "Mover",
"Produced with Plotly": "Criado com o Plotly",
Reset: "Restaurar",
"Reset axes": "Restaurar eixos",
"Reset camera to default": "Restaurar c\xe2mera para padr\xe3o",
"Reset camera to last save": "Restaurar c\xe2mera para \xfaltima salva",
"Reset view": "Restaurar vis\xe3o",
"Reset views": "Restaurar vis\xf5es",
"Show closest data on hover": "Exibir dado mais pr\xf3ximo ao pairar",
"Snapshot succeeded": "Captura instant\xe2nea completa",
"Sorry, there was a problem downloading your snapshot!": "Desculpe, houve um problema no download de sua captura instant\xe2nea!",
"Taking snapshot - this may take a few seconds": "Efetuando captura instant\xe2nea - isso pode levar alguns instantes",
"Toggle Spike Lines": "Habilitar/desabilitar triangula\xe7\xe3o de linhas",
"Toggle show closest data on hover": "Habilitar/desabilitar exibi\xe7\xe3o de dado mais pr\xf3ximo ao pairar",
"Turntable rotation": "Rota\xe7\xe3o de mesa",
Zoom: "Zoom",
"Zoom in": "Ampliar zoom",
"Zoom out": "Reduzir zoom",
"close:": "fechamento:",
"high:": "alta:",
"incoming flow count": "contagem de fluxo de entrada:",
"kde:": "kde:",
"lat:": "latitude:",
"lon:": "longitude:",
"low:": "baixa:",
"lower fence:": "limite inferior:",
"max:": "m\xe1ximo:",
"mean \xb1 \u03c3:": "m\xe9dia \xb1 \u03c3:",
"mean:": "m\xe9dia:",
"median:": "mediana:",
"min:": "m\xednimo:",
"new text:": "novo texto:",
"open:": "abertura:",
"outgoing flow count:": "contagem de fluxo de sa\xedda:",
"q1:": "q1:",
"q3:": "q3:",
"source": "origem:",
"target::": "destino:",
trace: "s\xe9rie",
"upper fence:": "limite superior:"
},
format: {
days: ["Domingo", "Segunda-feira", "Ter\xe7a-feira", "Quarta-feira", "Quinta-feira", "Sexta-feira", "S\xe1bado"],
shortDays: ["Dom", "Seg", "Ter", "Qua", "Qui", "Sex", "S\xe1b"],
months: ["Janeiro", "Fevereiro", "Mar\xe7o", "Abril", "Maio", "Junho", "Julho", "Agosto", "Setembro", "Outubro", "Novembro", "Dezembro"],
shortMonths: ["Jan", "Fev", "Mar", "Abr", "Mai", "Jun", "Jul", "Ago", "Set", "Out", "Nov", "Dez"],
date: "%d/%m/%Y"
}
};
"undefined" == typeof Plotly ? (window.PlotlyLocales = window.PlotlyLocales || [], window.PlotlyLocales.push(locale)) : Plotly.register(locale);
You'll notice very little difference if you look closely at the JS in this answer and what's initially in the file.
After changing it locally, this is what I rendered:
Following on from #Kat suggestion, we've come to a good point. But how to automate this? It seems to me that the problem is different now, it involves creating code in R in order to overcome the following error (when using #Kat var):
Erro: mistura de códigos de escape Unicode e octal/hexadecimal em uma cadeia de caracteres não é permitido
With the help of #JosefZ, I was able to implement the tweak by including the special characters. The understanding of the adjustment can be found here.
The code automating the new dictionary/locale, is:
require(plotly)
require(rprojroot)
require(glue)
lib_dir <- find_package_root_file(find.package('plotly'))
path_js <- glue::glue("{lib_dir}/htmlwidgets/lib/plotlyjs/locales")
file.create(glue::glue("{path_js}/pt-br_alternativo.js"))
# the temporary var
code <- 'var locale = {
moduleType: "locale",
name: "pt-br",
dictionary: {
Autoscale: "Escala autom\u00E1tica",
"Box Select": "Sele\u00E7\u00E3o retangular",
"Click to enter Colorscale title": "Clique para editar o t\u00EDtulo da escala de cor",
"Click to enter Component A title": "Clique para editar o t\u00EDtulo do Componente A",
"Click to enter Component B title": "Clique para editar o t\u00EDtulo do Componente B",
"Click to enter Component C title": "Clique para editar o t\u00EDtulo do Componente C",
"Click to enter Plot title": "Clique para editar o t\u00EDtulo do Grafico",
"Click to enter X axis title": "Clique para editar o t\u00EDtulo do eixo X",
"Click to enter Y axis title": "Clique para editar o t\u00EDtulo do eixo Y",
"Click to enter radial axis title": "Clique para editar o t\u00EDtulo do eixo radial",
"Compare data on hover": "Comparar dados ao pairar",
"Double-click on legend to isolate one trace": "Duplo clique na legenda para isolar uma s\u00E9rie",
"Double-click to zoom back out": "Duplo clique para reverter zoom",
"Download plot as a png": "Fazer download do gr\u00E1fico como imagem (png)",
"Download plot": "Fazer download do gr\u00E1fico",
"Edit in Chart Studio": "Editar no Chart Studio",
"IE only supports svg. Changing format to svg.": "IE suporta apenas svg. Alterando formato para svg",
"Lasso Select": "Sele\u00E7\u00E3o de lasso",
"Orbital rotation": "Rota\u00E7\u00E3o orbital",
Pan: "Mover",
"Produced with Plotly": "Criado com o Plotly",
Reset: "Restaurar",
"Reset axes": "Restaurar eixos",
"Reset camera to default": "Restaurar c\u00E2mera para padrao",
"Reset camera to last save": "Restaurar c\u00E2mera para ultima salva",
"Reset view": "Restaurar vis\u00E3o",
"Reset views": "Restaurar vis\u00F5es",
"Show closest data on hover": "Exibir dado mais proximo ao pairar",
"Snapshot succeeded": "Captura instant\u00E2nea completa",
"Sorry, there was a problem downloading your snapshot!": "Desculpe, houve um problema no download de sua captura instant\u00E2nea!",
"Taking snapshot - this may take a few seconds": "Efetuando captura instant\u00E2nea - isso pode levar alguns instantes",
"Toggle Spike Lines": "Habilitar/desabilitar triangula\u00E7\u00E3o de linhas",
"Toggle show closest data on hover": "Habilitar/desabilitar exibi\u00E7ao de dado mais pr\u00F3ximo ao pairar",
"Turntable rotation": "Rota\u00E7\u00E3o de mesa",
Zoom: "Zoom",
"Zoom in": "Ampliar zoom",
"Zoom out": "Reduzir zoom",
"close:": "fechamento:",
"high:": "alta:",
"incoming flow count": "contagem de fluxo de entrada:",
"kde:": "kde:",
"lat:": "latitude:",
"lon:": "longitude:",
"low:": "baixa:",
"lower fence:": "limite inferior:",
"max:": "m\u00E1ximo:",
"mean \u00b1 \u03c3:": "m\u00e9dia \u00b1 \u03c3:",
"mean:": "m\u00e9dia:",
"median:": "mediana:",
"min:": "m\u00EDnimo:",
"new text:": "novo texto:",
"open:": "abertura:",
"outgoing flow count:": "contagem de fluxo de saida:",
"q1:": "q1:",
"q3:": "q3:",
"source": "origem:",
"target::": "destino:",
trace: "s\u00E9rie",
"upper fence:": "limite superior:"
},
format: {
days: ["Domingo", "Segunda-feira", "Ter\u00E7a-feira", "Quarta-feira", "Quinta-feira", "Sexta-feira", "S\u00E1bado"],
shortDays: ["Dom", "Seg", "Ter", "Qua", "Qui", "Sex", "S\u00E1b"],
months: ["Janeiro", "Fevereiro", "Mar\u00E7o", "Abril", "Maio", "Junho", "Julho", "Agosto", "Setembro", "Outubro", "Novembro", "Dezembro"],
shortMonths: ["Jan", "Fev", "Mar", "Abr", "Mai", "Jun", "Jul", "Ago", "Set", "Out", "Nov", "Dez"],
date: "%d/%m/%Y"
}
};
"undefined" == typeof Plotly ? (window.PlotlyLocales = window.PlotlyLocales || [], window.PlotlyLocales.push(locale)) : Plotly.register(locale);'
write(code, file= glue::glue("{path_js}/pt-br_alternativo.js"))
We use this function before creating the plot. And the result has been positive, despite the spelling errors. Other dicitionary/languages/locales that don't have this problem will certainly be able to use this solution.
New plot:
fig <- plot_ly(x = ~rnorm(50), type = "box")
fig |>
config(locale = "pt-br_alternativo") # Attention

Subsetting a dataframe in R using key words that appear in the first 100 words

I have a dataframe that contains information on news articles (headlines, dates, content, etc). I would like to subset this dataframe by filtering the content of the news articles using key words. However, I would like to apply those key words within the first 100 words of the content.
So far, I have been able to subset the dataframe by identifying the keywords in each of the articles as shown below. However, I need to identify those key words within the first 100 words of each article.
#Dataframe
df_tiempo_noticias_farc1
#Filtering the dataframe by using key words
key_words_filter <- c("acuerdo de paz", "acuerdos de paz", "acuerdo con las farc", "acuerdos con las farc",
"acuerdo entre el gobierno y las farc", "acuerdo entre las farc y el gobierno",
"proceso de paz", "diálogos con las farc", "diálogos en la habana", "diálogos de la habana",
"diálogos de paz", "negociación con las farc", "negociaciones con las farc", "negociación en la habana",
"negociaciones en la habana", "negociadores del gobierno y las farc",
"negociadores de las farc y el gobierno", "plebiscito", "firma de la paz")
subset_tiempo_kwords <- df_tiempo_noticias_farc1[grep(paste0(key_words_filter, collapse = "|"), df_tiempo_noticias_farc1$content),]
Here is some data sample
> dput(subset_tiempo_kwords[1:2, 5])
[1]con la firma del nuevo acuerdo entre el gobierno y las farc y su refrendación en senado y cámara, las cartas están echadas y las apuestas, hechas. pero más allá de quién gane la partida, el resultado es que vamos al año y medio más difícil en la historia reciente del país.pese a que hubo cambios de fondo en el acuerdo final, como era previsible, no hubo acuerdo con los del no (no vale ya discutir si se les podía haber dado más juego o si, en el fondo, solo lo querían para dar largas). esto significa que la verdadera refrendación de lo acordado entre el gobierno y las farc se traslada a las elecciones del 2018.el país sigue tan dividido como antes del plebiscito (aunque más apático con la paz, a cuya firma ha asistido cinco veces desde junio). la polarización y el encono que signaron la campaña del plebiscito solo fueron el abrebocas de lo que nos espera hasta las elecciones presidenciales, que serán el veredicto final sobre lo acordado.el gobierno y las farc decidieron firmar el acuerdo y pasarlo por el congreso. el bloque del no ya anunció que opondrá, dentro del capitolio, recursos legales, como buscar un referendo por firmas, y fuera de él, llamados que bordean la ruptura institucional, como la revocatoria del congreso o la resistencia civil.todo indica que, aunque menos legítimo, el camino del congreso se escogió como más seguro, contando con las mayorías oficiales (que ya se exhibieron en el 75-0 de la refrendación en senado). arriesgada apuesta, pues esa vía puede terminar no siendo ni legítima ni segura.otro plebiscito sería largo, costoso y polarizador, como dice el gobierno. pero el legislativo no solo confiere menos legitimidad que cualquier consulta popular para refrendar el acuerdo, sino que es una de las instituciones más desprestigiadas del país. refrendar con una proposición, la fórmula de menor jerarquía en la mecánica legislativa, solo acentuará ese pecado de origen.pero la fragilidad de la refrendación vía congreso no es lo más grave. las grandes sorpresas pueden ser las de la implementación.el congreso es una vía de alto riesgo para los acuerdos. el gobierno ha puesto velas, cirios y candelabros para que la corte constitucional reviva la famosa ‘vía rápida’ para que los parlamentarios aprueben, veloces y sin cambios, lo que les proponga para implementar el acuerdo. pero, como pintan las cosas, es más probable que le toque irse por la vía ordinaria.con lo cual tomaría todo el 2017 poner a funcionar la jurisdicción especial para la paz, blindar jurídicamente el acuerdo y aprobar las leyes para hacerlo realidad. y los congresistas podrían introducir modificaciones inesperadas –como ya lo sugirió cambio radical respecto al sistema de justicia–. esto haría más traumático y lento el proceso de desmovilización de las farc. y pondría en lo más álgido de la campaña electoral un proceso de paz inconcluso y lleno de tensiones.ni el plebiscito ni la renegociación del nuevo acuerdo zanjaron la división entre partidarios del sí y del no. el gobierno, con sus mayorías en el congreso, puede lograr ahora blindar constitucionalmente lo acordado. pero otro gobierno, con otras mayorías, puede echar todo abajo –y a eso se la juega el bloque del no para el 2018–.todo este año y medio que falta hasta las elecciones presidenciales estará signado por esa polarización, que está tan viva como antes del plebiscito. el trámite de lo acordado en el congreso no hará sino agudizarla. y, mientras tanto, estará en curso, con más o menos sobresaltos, el complejo proceso de desmovilización, dejación de armas y reintegración de las farc.la ‘crispación nacional’ se va a profundizar hasta que en el 2018 se decida finalmente quién ganó: la paz o el no.\r* * * *\ry el eln... para enero.álvaro sierra restrepocortapalo#gmail.com#cortapalo,
[2] la comisión interamericana de derechos humanos (cidh) aplaudió este jueves la firma y aprobación del acuerdo de paz con las farc que fue ratificado esta semana tanto por la cámara como por el senado colombiano.\ren un comunicado expedido desde washington, el ente hemisférico expresa a su vez su beneplácito por los esfuerzos del gobierno por incluir en el nuevo acuerdo algunas propuestas de quienes se oponían al documento en general.\r\"la comisión interamericana reconoce los esfuerzos del estado para la renegociación del acuerdo de paz, en atención al pluralismo efectivo necesario en una sociedad democrática. la comisión ve con beneplácito que, tras tomar en cuenta las propuestas planteadas por los grupos que cuestionaron el acuerdo anterior y llamaron a votar en contra del mismo en el plebiscito del 2 de octubre pasado, colombia haya llegado a un nuevo acuerdo para la terminación del conflicto con las farc - ep\", dice la cidh. (le puede interesar: 'debemos presentar la ley de amnistía la próxima semana': mininterior)\ren el comunicado la comisión menciona la reunión que sostuvieron recientemente con el presidente juan manuel santos en la que se discutió \"la actual precariedad del cese al fuego y la futura implementación del acuerdo en colombia\".\rsegún este órgano, el presidente de la cidh, james cavallaro, le expresó a santos que el ente que encabeza continuaría monitoreando que la implementación del acuerdo se realice dentro del \"respeto y garantía a los estándares interamericanos\" de derechos humanos.\r\"la comisión mantiene su convicción respecto a que la consolidación de la paz es un requisito indispensable para el ejercicio y respeto de los derechos humanos. la cidh continúa comprometida con la búsqueda de la paz en colombia y dispuesta a colaborar en este esfuerzo, y en ese marco dará seguimiento a la implementación del nuevo acuerdo, en el marco de sus funciones\", dijo caravallo.\ren el comunicado, no obstante, la cidh resalta que el texto del nuevo acuerdo que les entregó santos en la reunión cambió antes de ser aprobado. (además: lo que viene tras la refrendación de la paz en el congreso)\raunque no menciona a cuál ajuste se refiere, la única modificación conocida al nuevo acuerdo que se llegó con las farc fue uno en el que se eliminó un artículo que hacía referencia a la responsabilidad de los militares por las acciones de sus subalternos.\ral respecto, el comisionado para colombia, josé de jesús orozco, destacó que \"continuarán dando seguimiento a la situación de los derechos humanos en colombia, a fin de que la implementación efectiva del acuerdo permita satisfacer los estándares internacionales de verdad, justicia y reparación en el contexto de transición hacia la paz\".\rpor su parte el embajador de colombia ante la oea, andrés gonzález, resaltó el apoyo de la comisión como \"de la mayor importancia porque el gobierno ha querido que el acuerdo de paz cumpla con todos los estándares internacionales. su declaración es esclarecedora: el camino más apropiado para prevenir las graves violaciones de derechos humanos es la terminación del conflicto armado. de acuerdo con gonzález el respaldo de la cidh representa \"una sólida columna de legitimidad jurídica internacional. todo el sistema interamericano se ha pronunciado por la paz de colombia como la paz de américa. primero, el consejo permanente de la oea por unanimidad. ahora la entidad rectora del continente en derechos humanos\".\rsergio gómez masericorresponsal de el tiempowashington ")
How can I do it? Thanks for any help!
The below code is an an example to create a new variable "Sentance_new" that selects the first 9 words in the original sentence. You can simply change 9 to 100. Then you filter based on the key words you want.
Df_1 <- data.frame(Sentance=c("Hello how are you doing today acuerdo de paz?
Can you give me a hand with this work."))
Df_2<-Df_1 %>%
mutate(Sentance_new=word(Sentance,1,9)) %>%
filter(str_detect(Sentance_new, 'acuerdo de paz'))
EDITED ADDITION:
DF_1 is your dataset with the text from numerous news sites. Just keep adding
"str_detect(news_2, "acuerdos de paz") | " from your key words. "|" is OR.
DF_2<-DF_1 %>%
mutate(news_2=word(news,1,100)) %>%
filter(str_detect(news_2, "acuerdo de paz") |
str_detect(news_2, "acuerdos de paz") |
str_detect(news_2, "acuerdo con las farc"))
Figured it out, use the first filter to create a subset, and create a regex pattern using the or operator "|" between each key word:
df <- tribble(~A,
"[1]con la firma del nuevo acuerdo entre el gobierno y las farc y su refrendación en senado y cámara, las cartas están echadas y las apuestas, hechas. pero más allá de quién gane la partida, el resultado es que vamos al año y medio más difícil en la historia reciente del país.pese a que hubo cambios de fondo en el acuerdo final, como era previsible, no hubo acuerdo con los del no (no vale ya discutir si se les podía haber dado más juego o si, en el fondo, solo lo querían para dar largas). esto significa que la verdadera refrendación de lo acordado entre el gobierno y las farc se traslada a las elecciones del 2018.el país sigue tan dividido como antes del plebiscito (aunque más apático con la paz, a cuya firma ha asistido cinco veces desde junio). la polarización y el encono que signaron la campaña del plebiscito solo fueron el abrebocas de lo que nos espera hasta las elecciones presidenciales, que serán el veredicto final sobre lo acordado.el gobierno y las farc decidieron firmar el acuerdo y pasarlo por el congreso. el bloque del no ya anunció que opondrá, dentro del capitolio, recursos legales, como buscar un referendo por firmas, y fuera de él, llamados que bordean la ruptura institucional, como la revocatoria del congreso o la resistencia civil.todo indica que, aunque menos legítimo, el camino del congreso se escogió como más seguro, contando con las mayorías oficiales (que ya se exhibieron en el 75-0 de la refrendación en senado). arriesgada apuesta, pues esa vía puede terminar no siendo ni legítima ni segura.otro plebiscito sería largo, costoso y polarizador, como dice el gobierno. pero el legislativo no solo confiere menos legitimidad que cualquier consulta popular para refrendar el acuerdo, sino que es una de las instituciones más desprestigiadas del país. refrendar con una proposición, la fórmula de menor jerarquía en la mecánica legislativa, solo acentuará ese pecado de origen.pero la fragilidad de la refrendación vía congreso no es lo más grave. las grandes sorpresas pueden ser las de la implementación.el congreso es una vía de alto riesgo para los acuerdos. el gobierno ha puesto velas, cirios y candelabros para que la corte constitucional reviva la famosa ‘vía rápida’ para que los parlamentarios aprueben, veloces y sin cambios, lo que les proponga para implementar el acuerdo. pero, como pintan las cosas, es más probable que le toque irse por la vía ordinaria.con lo cual tomaría todo el 2017 poner a funcionar la jurisdicción especial para la paz, blindar jurídicamente el acuerdo y aprobar las leyes para hacerlo realidad. y los congresistas podrían introducir modificaciones inesperadas –como ya lo sugirió cambio radical respecto al sistema de justicia–. esto haría más traumático y lento el proceso de desmovilización de las farc. y pondría en lo más álgido de la campaña electoral un proceso de paz inconcluso y lleno de tensiones.ni el plebiscito ni la renegociación del nuevo acuerdo zanjaron la división entre partidarios del sí y del no. el gobierno, con sus mayorías en el congreso, puede lograr ahora blindar constitucionalmente lo acordado. pero otro gobierno, con otras mayorías, puede echar todo abajo –y a eso se la juega el bloque del no para el 2018–.todo este año y medio que falta hasta las elecciones presidenciales estará signado por esa polarización, que está tan viva como antes del plebiscito. el trámite de lo acordado en el congreso no hará sino agudizarla. y, mientras tanto, estará en curso, con más o menos sobresaltos, el complejo proceso de desmovilización, dejación de armas y reintegración de las farc.la ‘crispación nacional’ se va a profundizar hasta que en el 2018 se decida finalmente quién ganó: la paz o el no.\r* * * *\ry el eln... para enero.álvaro sierra restrepocortapalo#gmail.com#cortapalo, ",
"[2] la comisión interamericana de derechos humanos (cidh) aplaudió este jueves la firma y aprobación del acuerdo de paz con las farc que fue ratificado esta semana tanto por la cámara como por el senado colombiano.\ren un comunicado expedido desde washington, el ente hemisférico expresa a su vez su beneplácito por los esfuerzos del gobierno por incluir en el nuevo acuerdo algunas propuestas de quienes se oponían al documento en general.\r\"la comisión interamericana reconoce los esfuerzos del estado para la renegociación del acuerdo de paz, en atención al pluralismo efectivo necesario en una sociedad democrática. la comisión ve con beneplácito que, tras tomar en cuenta las propuestas planteadas por los grupos que cuestionaron el acuerdo anterior y llamaron a votar en contra del mismo en el plebiscito del 2 de octubre pasado, colombia haya llegado a un nuevo acuerdo para la terminación del conflicto con las farc - ep\", dice la cidh. (le puede interesar: 'debemos presentar la ley de amnistía la próxima semana': mininterior)\ren el comunicado la comisión menciona la reunión que sostuvieron recientemente con el presidente juan manuel santos en la que se discutió \"la actual precariedad del cese al fuego y la futura implementación del acuerdo en colombia\".\rsegún este órgano, el presidente de la cidh, james cavallaro, le expresó a santos que el ente que encabeza continuaría monitoreando que la implementación del acuerdo se realice dentro del \"respeto y garantía a los estándares interamericanos\" de derechos humanos.\r\"la comisión mantiene su convicción respecto a que la consolidación de la paz es un requisito indispensable para el ejercicio y respeto de los derechos humanos. la cidh continúa comprometida con la búsqueda de la paz en colombia y dispuesta a colaborar en este esfuerzo, y en ese marco dará seguimiento a la implementación del nuevo acuerdo, en el marco de sus funciones\", dijo caravallo.\ren el comunicado, no obstante, la cidh resalta que el texto del nuevo acuerdo que les entregó santos en la reunión cambió antes de ser aprobado. (además: lo que viene tras la refrendación de la paz en el congreso)\raunque no menciona a cuál ajuste se refiere, la única modificación conocida al nuevo acuerdo que se llegó con las farc fue uno en el que se eliminó un artículo que hacía referencia a la responsabilidad de los militares por las acciones de sus subalternos.\ral respecto, el comisionado para colombia, josé de jesús orozco, destacó que \"continuarán dando seguimiento a la situación de los derechos humanos en colombia, a fin de que la implementación efectiva del acuerdo permita satisfacer los estándares internacionales de verdad, justicia y reparación en el contexto de transición hacia la paz\".\rpor su parte el embajador de colombia ante la oea, andrés gonzález, resaltó el apoyo de la comisión como \"de la mayor importancia porque el gobierno ha querido que el acuerdo de paz cumpla con todos los estándares internacionales. su declaración es esclarecedora: el camino más apropiado para prevenir las graves violaciones de derechos humanos es la terminación del conflicto armado. de acuerdo con gonzález el respaldo de la cidh representa \"una sólida columna de legitimidad jurídica internacional. todo el sistema interamericano se ha pronunciado por la paz de colombia como la paz de américa. primero, el consejo permanente de la oea por unanimidad. ahora la entidad rectora del continente en derechos humanos\".\rsergio gómez masericorresponsal de el tiempowashington")
#do this for the whole list
key_words_filter <- c("acuerdo de paz|acuerdos de paz|acuerdo con las farc")
df %>%
mutate(selection = str_extract(A, "^.{100}")) %>%
filter_all(any_vars(str_detect(., pattern = key_words_filter )))
A tibble: 1 x 2
A selection
<chr> <chr>
1 "[2] la comisión interamericana de derechos human~ [2] la comisión interamericana de derechos humano~
>
You can also explore using filter_at or filter_if if you don't want all columns filtering, you can specify the column you want.
This answer was produced based on the other two responses to this post
#Creating the key words filter
key_words_filter2 <- c("acuerdo de paz|acuerdos de paz|acuerdo con las farc|acuerdos con las farc|acuerdo entre el gobierno y las farc|acuerdo entre las farc y el gobierno|acuerdos de la habana|proceso de paz|diálogos con las farc|diálogos en la habana|diálogos de la habana|diálogos de paz|negociación con las farc|negociaciones con las farc|negociación en la habana|negociaciones en la habana|negociadores del gobierno y las farc|negociadores de las farc y el gobierno|plebiscito")
In order for the key words filter to work, it has to be in one line string as above and each key word separated by the condition | "OR".
#Subsetting the dataframe within 100 words
subset_tiempo_100 <- subset_tiempo_kwords%>%
mutate(content2=word(subset_tiempo_kwords$content, start= 1, end = 100)) %>%
filter(str_detect(content2, key_words_filter2))

My scrollable div is not displaying its entire content

I've got a huge text section that I wanted to contain in a scrollable div. I've created the scroll, and it scrolls, but the top lines of the text ve been cut off. Why is this happening? I've done scrollable divs before, albeit with less text, and it has worked fine.
The browser I'm using is Google Chrome
.reglas {
flex-direction: column;
height: 200px;
overflow: scroll;
padding: 1em;
background-color: #fff;
}
.parrafo-reglas {
padding: .5em;
}
<div class="section content reglas">
<h2>Reglas:</h2>
<p class="parrafo-reglas">Los siguientes son los términos que regirán el sorteo <span>PREPARA TU FUNERAL COMO PERFUME DE GARDENIAS</span> cuyo objetivo es sortear, al público general, (2) paquetes funerarios cortesía del Grupo Funerario del Caribe Inc.</p>
<p class="parrafo-reglas">De esta forma, <span>3 Gardenias LLC.</span> presenta oficialmente las primeras imágenes relacionadas a la película en desarrollo, <span>Perfume de Gardenias</span> y hace público el tema principal de la misma. Este sorteo apoya las gestiones para lograr
la filmación de la película.</p>
<h5>I. DIVULGACIÓN DEL SORTEO Y VIGENCIA</h5>
<p class="parrafo-reglas">Las reglas oficiales del sorteo <span>PREPARA TU FUNERAL</span> se rigen por el Reglamento Sobre Sorteos del Departamento de Asuntos del Consumidor del Estado Libre Asociado de Puerto Rico, aprobado el 27 de octubre de 2009.</p>
<p class="parrafo-reglas">El sorteo estará vigente a partir del 10 de julio de 2019 y termina el 30 de agosto de 2019, a la medianoche. Después de esa hora no se aceptarán más inscripciones.</p>
<p class="parrafo-reglas">Las reglas del sorteo estaran disponibles en la pagia de web de Perfume de Gradenias, www.perfumedegardenias.com, a la que se puede acceder de forma libre y atraves de la pagina del evento del sorteo en Facebook, www.facebook.com/perfumedegerdenias.</p>
<p class="parrafo-reglas">Estas reglas se encuentran redactadas únicamente en español.</p>
<h5>II. CONDICIONES DE ELEGIBILIDAD/REGLAS DE PARTICIPACIÓN:</h5>
<p class="parrafo-reglas">Podrán ser elegibles para participar personas mayores de 18 años, en y fuera de Puerto Rico con planes de servicios fúnebres en Puerto Rico exclusivamente.</p>
<p class="parrafo-reglas">Hay tres formas de participar:</p>
<ol>
<li>Mediante la compra en la página web del sorteo de una <span>(1) participación</span> por la cantidad de $5.00 y completar su registro de información personal. Se garantizan dos (2) opciones de pago, como algunas de las siguientes: PayPal [tarjeta
de crédito, cuentas de bancos, etc] y ATH Móvil. Esta compra le da automáticamente <span>(1) inscripción</span> en el sorteo. Un individuo puede participar de manera ilimitada por este medio.</li>
<li>Mediante la compra, en línea únicamente, de un <span>(1) velón</span> de diseño exclusivo para 3 Gardenias LLC, por la cantidad de $15.00 y completar su registro de información personal. Se garantizan dos (2) opciones de pago, como algunas de las
siguientes: PayPal[tarjeta de crédito, cuentas de bancos, etc] y ATH Movil. Esta compra le da automáticamente <span>(1) inscripción</span> en el sorteo. Un individuo puede participar mediante la compra de este artículo de manera ilimitada hasta
que el artículo se agote. En ese caso se anunciará como “AGOTADO” en la página web.</li>
<li>Mediante la compra en línea de una <span>(1) camiseta</span> de diseño exclusivo para 3 Gardenias LLC, por la cantidad de $25.00 y completar su registro de información personal. Se garantizan dos (2) opciones de pago, como algunas de las siguientes:
PayPal[tarjeta de crédito, cuentas de bancos, etc] y ATH Móvil. Esta compra le da automáticamente <span>(2) inscripciones</span> en el sorteo. Un individuo puede participar mediante la compra de este artículo de manera ilimitada hasta que el artículo
se agote. En ese caso se anunciará como “AGOTADO” en la página web.</li>
<li>También se puede participar <span>enviando por correo regular</span> en una tarjeta 3x5, nombre y apellidos, dirección postal, dirección de email, fecha de nacimiento y número de teléfono contacto a: “Prepara tu funeral como PERFUME DE GARDENIAS”,
P.O. Box 6131, San Juan, PR 00914. La información del participante será incorporada a los boletos participantes del sorteo. 3 Gardenias LLC no se hace responsable por información ilegible o incompleta que impida identificar al concursante en cuyo
caso se descalificará. Este medio de participación está limitado a <span>(1) participación</span> por individuo.</li>
</ol>
<p class="parrafo-reglas">Ninguno de los precios incluye el costo del envío. Las probabilidades de ganar dependen del número de participaciones recibidas.</p>
<p class="parrafo-reglas">No serán elegibles para participar del sorteo los empleados y familia del Grupo Funerario del Caribe Inc., ni ninguna de las personas vinculadas directamente con la producción de la película <span>Perfume de Gardenias</span>.</p>
<p class="parrafo-reglas">A los ganadores, se les notificará vía llamada telefónica el día del sorteo, vía correo electrónico y, vía correo certificado en un periódo de cinco (5) días luego de entregada el acta notarial de este sorteo.</p>
<h5>III. PREMIOS</h5>
<p class="parrafo-reglas">El sorteo ofrece dos (2) premios. El <span>primer premio</span> es un (1) Servicio Velación Tradicional del Grupo Funerario del Caribe Inc.; que incluye lo siguiente:</p>
<ol>
<li>Servicios Básicos del Director Funeral</li>
<li>Recogido y traslado del cuerpo en el área metropolitana</li>
<li>Embalsamamiento</li>
<li>Otros preparativos del cuerpo</li>
<li>Uso de facilidades de capillas</li>
<li>Coche Fúnebre</li>
<li>Paquete Memorial – [Incluye recordatorios, libro de firma, gratitud]</li>
<li>Documentación</li>
<li>Certificado de Defunción</li>
<li>Permiso de Entierro</li>
<li>Ataúd metal 20 gauge (colores a escoger)</li>
<ul>
<li>Lugar de velación podrá ser entre casa, iglesia de su preferencia o funeraria dentro de las participantes (al momento de redimirse) de la alianza del Grupo Funerario del Caribe, Inc.</li>
<li>No incluye transportación a forense</li>
<li>No incluye coche floral</li>
</ul>
</ol>
<p class="parrafo-reglas">Este premio tiene un <span>valor estimado de entre $5,000 y $10,000.</span></p>
<p class="parrafo-reglas">El <span>segundo premio</span> es un (1) Servicio Cremación Biodegradable del Grupo Funerario del Caribe Inc.; que incluye lo siguiente:</p>
<ol>
<li>Servicios Básicos del Director Funeral</li>
<li>Recogido y Traslado</li>
<li>Cremación</li>
<li>Bolso para cenizas</li>
<li>Urna Biodegradable Geos</li>
<li>Ceremonia de Disposición Básica en tierra o mar</li>
<li>Permisos y Documentación</li>
<ul>
<li> Si la disposición es en mar no incluye embarcación.</li>
<li>No incluye urna para cenizas</li>
</ul>
</ol>
<p class="parrafo-reglas">Este premio tiene un <span>valor estimado de $2,500.</span></p>
<h5>IV. SELECCIÓN DE GANADORES Y FECHA DE SORTEO</h5>
<p class="parrafo-reglas">Se realizará un (1) sorteo, que consistirá en la selección de dos (2) boletas de participación ganadoras, que serán elegidas al azar mediante tómbola ante notari#. Los premios se adjudicarán en el siguiente orden: (i) segundo (2do) premio, y (ii) primer
(1er) premio.</p>
<p class="parrafo-reglas">El sorteo se efectuará el martes, 3 de septiembre de 2019, a las 3:30 p.m. en Pública Espacio Cultural en Santurce.</p>
<p class="parrafo-reglas">En la misma fecha, se seleccionarán una tercera y cuarta boleta de participación, que serán declaradas ganadoras alternas en ese mismo orden, si el ganador original de alguno de los premios no lo reclama en el término que se dispone en el Artículo VII
de estas Reglas o es descalificado.</p>
<p class="parrafo-reglas">3 Gardenias LLC se reserva el derecho de invalidar o descalificar las participaciones que hayan utilizado un método fraudulento o no permitido por ley para participar o que no hayan cumplido con las reglas del sorteo</p>
<h5>V. CÓMO O DÓNDE SE PUEDEN OBTENER LAS PARTICIPACIONES/PRODUCTO PARTICIPANTE</h5>
<p class="parrafo-reglas">Las inscripciones de participación podrán obtenerse con la compra de uno de los artículos mencionados en el Artículo II de estas reglas a un costo de $5.00 por una (1) inscripción, de $15 por el artículo más una (1) inscripciones de participación o
de $25 por el artículo más una (2) inscripciones de participación. También se podrán comprar participaciones en actividades, eventos promocionales en los que participe 3 Gardenias LLC, que se anunciarán en la página web y en redes sociales; mediante
representantes autorizados que darán acceso a la página en línea de www.perfumedegardenias.com. La información de los participantes no será compartida con terceros; se utilizará exclusivamente para propósitos
de este sorteo y para promoción relacionada a la película.</p>
<p class="parrafo-reglas">Los artículos comprados serán entregados a los participantes en una fecha estipulada por 3 Gardenias LLC en un lugar que será divulgado en la fecha del sorteo. De no poder asistir, serán enviados por correo con un cargo adicional según aplique.</p>
<p class="parrafo-reglas">3 Gardenias LLC no se hace responsable de artículos perdidos en tránsito postal ni por paquetes que lleguen rotos a su destino.</p>
<h5>VI. NOTIFICACIÓN DE LOS GANADORES Y GANADORES ALTERNOS</h5>
<p class="parrafo-reglas">Una vez se efectúe el sorteo se notificará el resultado a los ganadores vía telefónica y se coordinará una cita en la oficina del Grupo Funerario del Caribe Inc. en un periodo de treinta (30) días naturales, con miras a finalizar la transacción de un
certificado válido por la cantidad y servicios establecidos en el Artículo III de estas reglas.</p>
<p class="parrafo-reglas">En caso de no poder contactar a los ganadores, se les avisará por correo certificado con acuse de recibo a la dirección provista, para advertirles que deben coordinar una cita en la oficina del Grupo Funerario del Caribe en periodo de treinta (30) días
naturales, contados a partir del envío de la notificación por correo. De un ganador así notificado no ponerse en contacto con 3 Gardenias LLC o el Grupo Funerario del Caribe Inc. en el término advertido, quedará descalificado, y se activará el sistema
de ganadores alternos contenido en el Artículo IV de estas reglas.</p>
<h5>VII. VIGENCIA DE RECLAMACIÓN DE PREMIO</h5>
<p class="parrafo-reglas">Los ganadores tendrán hasta treinta (30) días a partir de la fecha de notificación para reclamar su premio. Para la reclamación de los premios no se aceptarán representantes ni apoderados. 3 Gardenias LLC se reservará el derecho de exigir otras identificaciones
de los ganadores antes de iniciar los trámites conducentes al certificado de los premios. Ambos premios son transferibles.</p>
<h5>VIII. INFORMACIÓN SOBRE LOS ORGANIZADORES</h5>
<p class="parrafo-reglas">Este sorteo es organizado, promocionado y llevado a cabo por 3 Gardenias LLC, corporación registrada bajo las leyes del Estado Libre Asociado de Puerto Rico para información de contacto en www.perfumedegardenias.com o escribir a perfumedegardeniaspromo#gmail.com</p>
<h5>IX. LISTA DE GANADORES Y GANADORES ALTERNOS</h5>
<p class="parrafo-reglas">La lista de ganadores será publicada en la página de internet www.perfumedegardenias.com, en los perfiles en las redes sociales del sorteo <span>PREPARA TU FUNERAL como Perfume de Gardenias</span> luego de que se le comunique a los ganadores.</p>
<h5>X. RELEVO DE RESPONSABILIDADES</h5>
<p class="parrafo-reglas">Cesará toda y cualquier obligación de 3 Gardenias LLC con los ganadores al momento de la otorgación del certificado.</p>
<h5>XI. MODIFICACIONES DEL SORTEO</h5>
<p class="parrafo-reglas">3 Gardenias LLC se reserva el derecho de enmendar estas reglas de ser necesario y notificar las debidas modificaciones, según lo dispuesto en el Reglamento de Sorteos del Departamento de Asuntos del Consumidor del Estado Libre Asociado de Puerto Rico,
Reglamento 7764 de 27 de octubre de 2009.</p>
<h5>XII. CONSENTIMIENTO</h5>
<p class="parrafo-reglas">Los ganadores concederán a 3 Gardenias LLC el derecho de difundir su imagen: nombre, fotografía, retrato, voz, firma, atributo o cualquier representación que sirva para identificar al ganador, ante un observador o escucha promedio, mediante cualquier
procedimiento o técnica de producción, así como municipio de residencia y agencia gubernamental donde labore (en caso de que el ganador lo sea), en sus publicaciones, revistas y en la página de Internet www.perfumedegardenias.com, sin tener que compensarles
adicionalmente al premio recibido.</p>
<p class="parrafo-reglas">El participante acuerda relevar a 3 Gardenias LLC y el Grupo Funerario del Caribe Inc., sus corporaciones subsidiarias, funcionarios, agentes, aseguradores, auspiciadores, empleados, contratistas, sucesores o causahabientes, de toda responsabilidad
civil en daños, o de cualquier responsabilidad al amparo de la Ley 139-2011, conocida como “Ley del Derecho sobre la Propia Imagen” o cualquier otra fuente de derecho, estatal o federal, que proteja los derechos que podrían reclamarse sobre el uso
de imágenes, fotografías, videos o audios que puedan ser obtenidos como parte de este concurso.</p>
<p class="parrafo-reglas">El participante acuerda permitir a 3 Gardenias LLC usar su información de contacto para enviarles futura información y material promocionando la película <span>Perfume de Gardenias.</span></p>
<p class="parrafo-reglas">El participante admite y reconoce que ha analizado estas reglas y acuerda cumplir cabalmente con estas.</p>
<h5>XIII. PREGUNTAS, INFORMACIÓN, PARA PARTICIPAR:</h5>
<p class="parrafo-reglas">Para dudas o preguntas puede comunicarse mediante correo electrónico a: perfumedegardeniaspromo#gmail.com o acceder a nuestros página en Facebook: Página Oficial de la película Perfume de Gardenias y PREPARA TU FUNERAL.</p>
<h5>XIV. HERMENÉUTICA</h5>
<p class="parrafo-reglas">En el caso de que haya alguna inconsistencia entre la versión completa de las reglas y las reglas abreviadas, la versión que sea de más beneficio para los participantes prevalecerá.</p>
<h5>XV. SUSPENSIÓN O CANCELACIÓN DEL SORTEO</h5>
<p class="parrafo-reglas">3 Gardenias LLC se reserva el derecho de solicitar al Secretario del Departamento de Asuntos del Consumidor la suspensión o cancelación del sorteo, en cumplimiento con lo dispuesto en las Reglas 9, 10 y 11 del Reglamento de Sorteos del Departamento
de Asuntos del Consumidor del Estado Libre Asociado de Puerto Rico, Reglamento 7764 de 27 de octubre de 2009.</p>

How to get rid of white space beneath flowchart made with DiagrammeR and knitted to pdf?

What I want to do is to create a basic flowchart with DiagrammeR within a code chunk in my R Markdown file and make it referencable (if possible like I did with my ggplot2 figures -> fig.cap = " " in the code chunk header).
My code so far:
```{r flowchart-ablauf, fig.cap = "Ablauf der Datenverarbeitung", fig.align = 'right', echo = FALSE}
DiagrammeR::grViz(diagram = "
digraph rmarkdown {
graph [nodesep = 1.5, ranksep = 1.5]
node [shape = box, fontname = Helvetica, fontsize = 80, penwidth = 6, fixedsize = true, width = 16.5, height = 3]
'Verbrauchsdaten von der\nSpitalpharmazie (Excel-Tabelle)'; 'Belegzahlen vom Ressort\nFinanzen (Excel-Tabelle)';
node [shape = box, fontname = Helvetica, fontsize = 80, penwidth = 6, fixedsize = true, width = 20.5, height = 3]
'Import der Daten aus Excel ins\nMicrosoft Access (Datenbanksoftware)'; 'Zusammenführen der Informationen und\nerstellen neuer, berechneter Tabellen';
'Export der neu erstellten Tabellen\nin Form von Excel-Tabellen'; 'Berechnung und grafische Darstellung\nder Grafiken und Tabellen'
node [shape = box, fontname = Helvetica, fontsize = 80, penwidth = 6, fixedsize = true, width = 20.5, height = 2]
'Import der neuen Tabellen in R';
#Pfeile
edge [arrowhead = vee, arrowsize = 4, penwidth = 6]
'Verbrauchsdaten von der\nSpitalpharmazie (Excel-Tabelle)' -> 'Import der Daten aus Excel ins\nMicrosoft Access (Datenbanksoftware)';
'Belegzahlen vom Ressort\nFinanzen (Excel-Tabelle)' -> 'Import der Daten aus Excel ins\nMicrosoft Access (Datenbanksoftware)';
'Import der Daten aus Excel ins\nMicrosoft Access (Datenbanksoftware)' -> 'Zusammenführen der Informationen und\nerstellen neuer, berechneter Tabellen';
'Zusammenführen der Informationen und\nerstellen neuer, berechneter Tabellen' -> 'Export der neu erstellten Tabellen\nin Form von Excel-Tabellen'
'Export der neu erstellten Tabellen\nin Form von Excel-Tabellen' -> 'Import der neuen Tabellen in R'
'Import der neuen Tabellen in R' -> 'Berechnung und grafische Darstellung\nder Grafiken und Tabellen'
}
")
```
How it looks after beeing knitted to pdf:
I have a couple of questions:
Why do I have to make the fontsize so big to make it readable? I mean it is at 80 and it's still smaller than the fontsize of the text which set to 11pt in the yaml header?!
Why is the "fig. align = 'right'" not doing anything?
Most importantly: How can I get rid of the huge white space beneath the flowchart (between the flowchart and the figure caption)?
I've found a working solution here
That is how my code ended up looking:
---
header-includes:
- \usepackage{wrapfig}
- \usepackage{lipsum}
output:
pdf_document:
keep_tex: true
---
```{r, include = F}
defOut <- knitr::knit_hooks$get("plot") # save the default plot hook
knitr::knit_hooks$set(plot = function(x, options) { # set new plot hook ...
x <- defOut(x, options) # first apply the default hook
if(!is.null(options$wrapfigure)) { # then, if option wrapfigure is given ...
# create the new opening string for the wrapfigure environment ...
wf <- sprintf("\\begin{wrapfigure}{%s}{%g\\textwidth}", options$wrapfigure[[1]], options$wrapfigure[[2]])
x <- gsub("\\begin{figure}", wf, x, fixed = T) # and replace the default one with it.
x <- gsub("{figure}", "{wrapfigure}", x, fixed = T) # also replace the environment ending
}
return(x)
})
```
```{r flowchart-ablauf, echo = F, fig.cap = "Ablauf der Datenverarbeitung", fig.align = 'right', out.extra = 'trim = {5cm 6.5cm 12.5cm 4cm}', out.width=".5\\textwidth", wrapfigure = list("R", .5)}
DiagrammeR::grViz(diagram = "
digraph rmarkdown {
graph [nodesep = 1.5, ranksep = 1.5]
node [style = filled, fillcolor = Gray90, shape = box, fontname = Helvetica, fontsize = 80, penwidth = 6, fixedsize = true, width = 16.5, height = 3]
'Verbrauchsdaten von der\nSpitalpharmazie (Excel-Tabelle)'; 'Belegzahlen vom Ressort\nFinanzen (Excel-Tabelle)';
node [shape = box, fontname = Helvetica, fontsize = 80, penwidth = 6, fixedsize = true, width = 20.5, height = 3]
'Import der Daten aus Excel ins\nMicrosoft Access (Datenbanksoftware)'; 'Zusammenführen der Informationen und\nerstellen neuer, berechneter Tabellen';
'Export der neu erstellten Tabellen\nin Form von Excel-Tabellen'; 'Berechnung und grafische Darstellung\nder Grafiken und Tabellen'
node [shape = box, fontname = Helvetica, fontsize = 80, penwidth = 6, fixedsize = true, width = 20.5, height = 2]
'Import der neuen Tabellen in R';
#Pfeile
edge [arrowhead = vee, arrowsize = 4, penwidth = 6]
'Verbrauchsdaten von der\nSpitalpharmazie (Excel-Tabelle)' -> 'Import der Daten aus Excel ins\nMicrosoft Access (Datenbanksoftware)';
'Belegzahlen vom Ressort\nFinanzen (Excel-Tabelle)' -> 'Import der Daten aus Excel ins\nMicrosoft Access (Datenbanksoftware)';
'Import der Daten aus Excel ins\nMicrosoft Access (Datenbanksoftware)' -> 'Zusammenführen der Informationen und\nerstellen neuer, berechneter Tabellen';
'Zusammenführen der Informationen und\nerstellen neuer, berechneter Tabellen' -> 'Export der neu erstellten Tabellen\nin Form von Excel-Tabellen'
'Export der neu erstellten Tabellen\nin Form von Excel-Tabellen' -> 'Import der neuen Tabellen in R'
'Import der neuen Tabellen in R' -> 'Berechnung und grafische Darstellung\nder Grafiken und Tabellen'
}
")
```

true in math , false in R

i'm here because i'm using R to simulate some math functions , i'm using this equality
And when i simulate it on R i have two differents graph and i'm not finding where am i wrong ....
Can you help me ?
Here is the code :
Ps: i've also try to make the integral calc by the function integrate but it make the same thing
here we have:
setwd("~/Desktop/stage rapport")
#Pi probabilité de la réussite d'un épreuve de bernouilli en intégrale
#p : la probabilité d'un tirage de bernouilli
#t : le nombre total de tirage avant échec de l'épreuve
#n : nombre de succés necessaire à la réussite de l'épreuve
#prec : la precision de l'intégrale
Pi = function(t,n,p,prec){
resintg = 0
for (i in seq(p,1,by=prec)){
resintg = resintg + (i^(t-n))*((1-i)^(n-1))*prec
}
return(resintg*factorial(t)/(factorial(n-1)*factorial(t-n)))
}
#Ps probabilité de la réussite d'un épreuve de bernouilli en somme totale
#p : la probabilité d'un tirage de bernouilli
#t : le nombre total de tirage avant échec de l'épreuve
#n : nombre de succés necessaire à la réussite de l'épreuve
#prec : la precision de l'intégrale
Ps = function(t,n,p){
val = 0
for (k in seq(0,t-n)){
list = seq(k+1,k+n-1)
val = val + prod(list)*(p)^(k)
}
return((val*((1-p)^n))/factorial(n-1))
}
###################################################
#Le Main :
###################################################
#paramètre
t = 24
n = 8
i = 1
preci = 0.1
#calcul de P(p)1
x = seq(0,1,by=0.01)
y = NULL
for (p in x){
y = c(y,Pi(t,n,p,preci))
}
#calcul de P(p)2
x_ = seq(0,1,by=0.01)
y_ = NULL
for (p in x){
y_ = c(y_,Ps(t,n,p))
}
#tracer des courbes
png("courbeforum.png",width = 1200, height = 700)
plot(x,y,type = "l",col = "red",ylim = c(0,1))
lines(x_,y_,col="blue")
dev.off()
Increase the precision.
If you set it to
preci = 0.001
you'll get an output:

Resources