1. Set a demo list
# Your input list
gene_list <- list(
GeneListA = c("A", "B", "C", "D", "E", "F"),
GeneListB = c("A", "F", "H"),
GeneListC = c("A", "C", "D", "H"),
GeneListD = NA
)
print(gene_list)
## $GeneListA
## [1] "A" "B" "C" "D" "E" "F"
##
## $GeneListB
## [1] "A" "F" "H"
##
## $GeneListC
## [1] "A" "C" "D" "H"
##
## $GeneListD
## [1] NA
2. Turn it into a dataframe
# Find the maximum length of the list elements
max_length <- max(sapply(gene_list, length))
# Create a data frame with columns named after list elements
gene_df <- as.data.frame(lapply(gene_list, function(x) {
length(x) <- max_length # Extend each element to max length by padding with NAs
return(x)
}))
# View the data frame
print(gene_df)
We need to note that GeneListD could not be NULL
Show you the difference
# Your input list
gene_list <- list(
GeneListA = c("A", "B", "C", "D", "E", "F"),
GeneListB = c("A", "F", "H"),
GeneListC = c("A", "C", "D", "H"),
GeneListD = c()
)
# Replace NULL with empty character vectors
gene_list_modified <- lapply(gene_list, function(x) if (is.null(x)) character(0) else x)
print(gene_list)
## $GeneListA
## [1] "A" "B" "C" "D" "E" "F"
##
## $GeneListB
## [1] "A" "F" "H"
##
## $GeneListC
## [1] "A" "C" "D" "H"
##
## $GeneListD
## NULL
print(gene_list_modified)
## $GeneListA
## [1] "A" "B" "C" "D" "E" "F"
##
## $GeneListB
## [1] "A" "F" "H"
##
## $GeneListC
## [1] "A" "C" "D" "H"
##
## $GeneListD
## character(0)