guia - Sin enlace visible para variable global Nota en R CMD check
qgis manual (4)
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 marco de datos:
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?
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"))
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 programació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.
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.
Según la sección de advertencia del ?subset
Es mejor utilizar el subconjunto de forma interactiva y [
para la programación.
Reemplazaría un comando como
subset(foo,a)
con
foo[foo$a]
o si foo es un marco de datos:
foo[foo$a, ]
es posible que también desee utilizar with
if foo es un marco de datos y la expresión a evaluar es compleja:
with(foo, foo[a, ])