cómo pasar el valor para fun2 que se encuentra en fun1
Traté de mostrar las dos columnas por separado como en la imagen, pero estoy obteniendo un error en rbind(df, subrow): el número de columnas del resultado no es un múltiplo de la longitud del vector (arg 2).
expand_collapse <- function(right_table){
sector_list <- unique(right_table$Sector)
df = data.frame("Sector1"=c(""),"Sector"=c(""),"Incubatee"=c(""),"Actual"=c(""))
my_fun <- function(s){
df1 = right_table[right_table$Sector==s,]
sector1 = df1$Sector[1]
Sector = df1$Sector[1]
Incubatee = ""
actual = as.character(nrow(df1))
mainrow = c(sector1,Sector,Incubatee,actual)
df = rbind(df,mainrow)
incubatee_list <<- unique(df1$Incubatee)
}
df = do.call(rbind,lapply(sector_list, my_fun))
my_fun2 <- function(i){
df2 = right_table[right_table$Incubatee==i,]
sector1 = df1$Sector[1]
Sector = ""
Incubatee = df2$Incubatee[1]
actual = nrow(df2)
subrow = c(sector1,Sector,Incubatee,actual)
df = rbind(df,subrow)
}
df = do.call(cbind,lapply(incubatee_list, my_fun2))
df = df[2:nrow(df),]
df$Actual = as.numeric(df$Actual)
df_total = nrow(right_table)
df = rbind(df,c("","Total","",df_total))
return(df)
}
DT::datatable(expand_collapse(x), rownames = F,escape = FALSE,selection=list(mode=”single”,target=”row”),options = list(pageLength = 50,scrollX = TRUE,dom = ‘tp’,ordering=F,columnDefs = list(list(visible=FALSE, targets=0),list(className = ‘dt-left’, targets = ‘all’))),class=’hover cell-border stripe’)
davy.ai
El mensaje de error “el número de columnas del resultado no es un múltiplo de la longitud del vector (arg 2)” ocurre típicamente cuando se intenta fusionar dos marcos de datos con un número desigual de columnas.
En el código proporcionado, el error podría ser causado por la segunda función
do.call()
, que aplica la funciónmy_fun2()
a cada incubado único enincubatee_list
. La funciónmy_fun2()
crea una subfila, pero parece que le faltan la misma cantidad de columnas que el marco de datos principaldf
.Para resolver el error, podemos modificar la función
my_fun2()
para crear un marco de datos secundario con el mismo número de columnas que el marco de datos principal, y luego fusionarlo con el marco de datos principal utilizando la funciónrbind()
. Aquí hay un ejemplo de cómo podemos modificar el código:La función
Reduce()
aplica la funciónmy_fun2()
de manera iterativa a cada incubado único enincubatee_list
y acumula el resultado en una lista. El argumentoinit
especifica el marco de datos inicial comodf[-1,]
para eliminar la primera fila vacía creada anteriormente. El argumentoaccumulate
guarda todos los resultados intermedios en la lista. Finalmente, extraemos el último elemento de la lista como el marco de datos fusionadodf
.Con esta modificación, deberíamos poder mostrar la tabla de datos con dos columnas separadas según lo deseado.