filtrar español empty ejemplos datos data create crear agrupar class function r if-statement

class - español - ¿Por qué ifelse convierte un data.frame a una lista: ifelse(TRUE, data.frame(1), 0))!!=Data.frame(1)?



filtrar data frame r (1)

ifelse generalmente está destinado a comparaciones vectorizadas, y tiene efectos secundarios como estos: como se dice en ?ifelse ,

‘ifelse’ returns a value with the same shape as ‘test’ ...

entonces en este caso (la test es un vector de longitud 1) intenta convertir el marco de datos a un ''vector'' (lista en este caso) de longitud 1 ...

return(if (condition) mydf else NA)

Como punto de diseño general, intento devolver objetos de la misma estructura pase lo que pase, por lo que podría preferir

if (!condition) mydf[] <- NA return(mydf)

Como regla general, encuentro que los usuarios R (especialmente provenientes de otros lenguajes de programación) comienzan usando de manera exclusiva, toman un tiempo para descubrir ifelse , luego los sobreutilizan por un tiempo, descubriendo más tarde que realmente quieren usar if en contextos lógicos . Algo similar sucede con & y && .

Ver también:

Quiero devolver un data.frame desde una función si es TRUE, de lo contrario devolveré NA usando return(ifelse(condition, mydf, NA))

Sin embargo, ifelse quita los nombres de columna de data.frame.

¿Por qué estos resultados son diferentes?

> data.frame(1) X1 1 1 > ifelse(TRUE, data.frame(1), NA) [[1]] [1] 1

Algunas ideas adicionales de dput ():

> dput(ifelse(TRUE, data.frame(1), 0)) list(1) > dput(data.frame(1)) structure(list(X1 = 1), .Names = "X1", row.names = c(NA, -1L), class = "data.frame")