## Requirement: "tibble"
filter_pcr_amplicons = function(pcr_data, reference_data, name_col_primer_pcr = "PRIMER_SET",
name_col_primer_ref = "SHORT_NAME", name_col_orientation_pcr = "PRIMERS_USED",
name_col_forward_ref = "FORWARD", name_col_reverse_ref = "REVERSE"){
list_pcr_data = lapply(split(pcr_data, pcr_data[[name_col_primer_pcr]]), function(x)
x[which(x[[name_col_orientation_pcr]] == names(sort(table(x[[name_col_orientation_pcr]]), decreasing = T))[1]), ])
if(length(list_pcr_data[sapply(list_pcr_data, nrow) == 0]) == length(unique(pcr_data[[name_col_primer_pcr]])))
list_pcr_data = split(pcr_data, pcr_data[[name_col_primer_pcr]])
else if(length(list_pcr_data[sapply(list_pcr_data, nrow) == 0]) != 0) {
for(j in 1:length(list_pcr_data[sapply(list_pcr_data, nrow) == 0])){
list_pcr_data[sapply(list_pcr_data, nrow) == 0][j] = pcr_data[which(pcr_data[[name_col_primer_pcr]] ==
names(list_pcr_data[sapply(list_pcr_data, nrow) == 0][j])), ]
}
}
for(i in 1:length(list_pcr_data)){
orientation = unique(list_pcr_data[[i]][[name_col_orientation_pcr]])
reference_primer = reference_data[which(reference_data[[name_col_primer_ref]] == names(list_pcr_data)[i]), ]
if(orientation == "1 x 2"){
forward_primer = reference_primer[[name_col_forward_ref]]
reverse_primer = reference_primer[[name_col_reverse_ref]]
}
else if(orientation == "2 x 1") {
forward_primer = reference_primer[[name_col_reverse_ref]]
reverse_primer = reference_primer[[name_col_forward_ref]]
}
else stop(paste0('As only one forward and one reverse primers can be provided, "orientation" must be in "1 x 2" or "2 x 1".\nPlease check if the ',
name_col_orientation_pcr, ' column of the pcr dataframe contains only those values.'))
list_pcr_data[[i]]$SEQUENCES = substring(list_pcr_data[[i]]$SEQUENCES, nchar(forward_primer) + 1,
nchar(list_pcr_data[[i]]$SEQUENCES))
list_pcr_data[[i]]$SEQUENCES = substring(list_pcr_data[[i]]$SEQUENCES, 1,
nchar(list_pcr_data[[i]]$SEQUENCES) - nchar(reverse_primer))
}
final_pcr_data = do.call("rbind", list_pcr_data)
tibble(final_pcr_data)
}
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.