Sin enlace visible para variable global Nota en R CMD check

Al revisar un paquete, noté que obtuve notas “sin enlace visible para variable global” cuando uso funciones como subset que usan nombres literales de elementos de lista como argumentos.

Por ejemplo, con un dataframe:

foo <- data.frame (a = c (VERDADERO, FALSO, VERDADERO), b = 1: 3)

Puedo hacer tonterías como:

 subset(foo,a) transform(foo,a=b) 

Que trabajo como se esperaba Sin embargo, la verificación del código R en R CMD no comprende que estos se refieran a elementos y se queje de que no haya enlaces visibles de variables globales.

Si bien esto funciona bien, realmente no me gusta tener notas en mi paquete y prefiero que pase el cheque sin errores, advertencias y notas. También realmente no quiero volver a trabajar mi código demasiado. ¿Hay alguna manera de escribir estos códigos para que quede claro que los argumentos no se refieren a variables globales?

Para superar el R CMD check , puede:

  • Use get("b") (pero eso es oneroso)
  • Coloca a=b=NULL algún lugar más arriba en tu función (eso es lo que hago)

Hubo un hilo en r-devel hace un tiempo donde alguien de r-core básicamente dijo (de memoria) “NOTAS están bien, ya sabes. La suposición es que el autor lo revisó y está bien con la NOTA”. Pero estoy de acuerdo contigo Prefiero que las comprobaciones CRAN devuelvan un “OK” limpio en todas las plataformas. De esta forma, el usuario no tiene dudas de que pasa los controles bien.

EDITAR:

Aquí está el hilo de r-devel que estaba recordando (desde abril de 2010). Así que eso parece sugerir que hay algunas situaciones en las que no hay forma conocida de evitar la NOTA, pero eso está bien.

Esta es una de las posibles “consecuencias imprevistas” del uso de subset no interactiva. Como dice en la sección Advertencia del ?subset

Esta es una función de conveniencia diseñada para su uso de manera interactiva. Para la progtwigción, es mejor utilizar las funciones de subconjunto estándar como ‘[‘, y en particular la evaluación no estándar del argumento ‘subconjunto’ puede tener consecuencias imprevistas.

Desde R versión 2.15.1 en adelante hay una forma de evitar esto:

 if(getRversion() >= "2.15.1") utils::globalVariables(c("a", "othervar")) 

Según la sección de advertencia del ?subset Es mejor utilizar el subconjunto de forma interactiva y [ para la progtwigción.

Reemplazaría un comando como

subset(foo,a)

con

foo[foo$a]

o si foo es un dataframe:

foo[foo$a, ]

es posible que también desee utilizar with if foo es un dataframe y la expresión a evaluar es compleja:

with(foo, foo[a, ])