en R, ¿puedo dejar de imprimir(cat(“”)) para que devuelva NULL? y por qué cat("foo") devuelve foo>
concatenation paste (6)
He tenido exactamente el mismo problema. En pocas palabras, cat()
es un poco torpe debajo de R. No entró en gran detalle acerca de cómo está tratando de usar cat()
pero sugeriría mirar paste()
.
?paste
Creo que puede ser lo que buscas.
Si entro
print(cat(""))
yo obtengo
NULL
Quiero usar cat()
para imprimir el progreso de un script R, pero no entiendo por qué devuelve NULL
al final de todas mis cadenas concatenadas y, lo que es más importante, ¿cómo hacer que se detenga?
NULL es el valor de retorno de "cat ()". Si omite el "print ()" exterior, no verá el valor NULL.
No veo la necesidad de usar print(cat())
. Para imprimir un mensaje cat()
ya es suficiente. Esto puede ser lo que buscas:
for (j in 1:n) {
cat("Running loop", j, "of", n, "/n")
}
Para esto, a menudo uso writeLines()
, en combinación con strwrap()
, y paste()
para combinar el valor del bucle si estoy imprimiendo información sobre la iteración actual. strwrap()
maneja el strwrap()
líneas largas según sea necesario, y writeLines()
significa que no tengo que recordar agregar un "/n"
al final de mis llamadas cat()
.
> writeLines(strwrap("a very very very very long long long long long long long long string, that is too wide for the current pager width"))
a very very very very long long long long long long long long string,
that is too wide for the current pager width
Aquí hay un ejemplo que lo usa para imprimir un indicador de iteración:
for(i in 1:1000) {
if(isTRUE(all.equal(i %% 100, 0)))
writeLines(strwrap(paste("Iteration", i)))
## do something
}
Da:
> for(i in 1:1000) {
+ if(isTRUE(all.equal(i %% 100, 0)))
+ writeLines(strwrap(paste("Iteration", i)))
+ ## do something
+ }
Iteration 100
Iteration 200
Iteration 300
Iteration 400
Iteration 500
Iteration 600
Iteration 700
Iteration 800
Iteration 900
Iteration 1000
Si desea asignarlo a una variable, para usar en un LOOP de * apply o function (x), intente esto:
x<-eval(paste0(name,".y"))
El nombre es la variable, el ".y" le agrega una cadena, pegar dice que se imprima, eval evalúa la impresión, <- la asigna a una variable y ax es esa variable.
Todas sus respuestas están en la documentación de ?cat
. Las porciones que responden a tu pregunta específica son:
Argumentos:
fill: a logical or (positive) numeric controlling how the output is broken into successive lines. If ‘FALSE’ (default), only newlines created explicitly by ‘"/n"’ are printed. Otherwise, the output is broken into lines with print width equal to the option ‘width’ if ‘fill’ is ‘TRUE’, or the value of ‘fill’ if this is numeric. Non-positive ‘fill’ values are ignored, with a warning.
... y ...
Valor:
None (invisible ‘NULL’).
Así que no puedes evitar que la print(cat(...))
devuelva NULL
porque eso es lo cat
devuelve cat
. Y necesitas agregar explícitamente nuevas líneas como cat("foo/n")
.