[R-pkg-devel] Possible bug report/false positive

Igor L |gor|@|tu| @end|ng |rom gm@||@com
Thu Jan 6 22:56:45 CET 2022


Ivan,
Declaring the variables inside the function solved the problem (protocolo
<- X1 <- X2 <- ... X21 <- NULL).
Thanks for the help and suggestions for improving the code.
Best Regards,
Igor

Em qui., 6 de jan. de 2022 às 11:37, Ivan Krylov <krylov.r00t using gmail.com>
escreveu:

> On Wed, 5 Jan 2022 17:15:20 -0300
> Igor L <igorlaltuf using gmail.com> wrote:
>
> >   Found the platform-specific device:
> >    'X11'
>
> > how to solve it?
>
> One of the tricks that work (in the sense that calls to functions using
> non-standard evaluation don't result in warnings about "Undefined
> global functions or variables") is to declare the variables locally,
> inside the function:
>
> protocolo <- X1 <- X2 <- ... X21 <- NULL
> var <- readr::read_csv2(...) ...
>
> Alternatively, since you know that the file always has 21 columns,
> you can pass the variable to `colnames<-` instead of dplyr::rename,
> together with a vector of column names you already have in the
> nomes.colunas vector. This way, you won't need to declare the 21 dummy
> variable.
>
> By the way, you shouldn't declare at least download.file and unzip
> functions as global variables. Instead, import them from the utils
> package in your NAMESPACE (or using the @importFrom Roxygen tag, if you
> use Roxygen).
>
> There are other ways the package code could be improved:
>
>  - There doesn't seem to be a need for the dynamically-named variable
>    you create using assign(paste0('pedidos', i), var) and remove soon
>    after; you can just use `var` instead of get(paste0('pedidos', i)).
>  - If you're worried about leaving temporary variables around, move
>    the loop body into a separate function so that anything you don't
>    return from it would be cleaned up automatically.
>  - You can future-proof your package by creating the URLs with
>    paste0('
> https://dadosabertos-download.cgu.gov.br/FalaBR/Arquivos_FalaBR_Filtrado/Arquivos_csv_
> ',
>    year, '.zip') instead of hard-coding their list. It seems likely to
>    me that once the 2022 Right to Information Law report is available,
>    it'll have a predictable URL. If not, then you'll update the
>    package (as you were going to anyway).
>  - If you need to iterate over indices in a vector, use for (idx in
>    seq_along(vector)) instead of for (i in vector) and match() to
>    find the index. Though in this case, the code can be modified to
>    avoid the need for the index in the loop body.
>
> --
> Best regards,
> Ivan
>

	[[alternative HTML version deleted]]



More information about the R-package-devel mailing list