Мы можем создать именованное comparison_list
со всеми возможными значениями, которые оно может принять, а затем использовать mapply
comparison_list <- list(GGCC = c("GG", "CC"), AATT = c("AA", "TT"),
ACAG = c("AC", "AG"))
df$boolean <- mapply(function(x, y)
any(comparison_list[[grep(x, names(comparison_list))]] ==
comparison_list[[grep(y, names(comparison_list))]]),
df$ref, df$sample)
df
# rsid ref sample boolean
#1 rs104211 CC GG TRUE
#2 rs104998 AA TT TRUE
#3 rs105063 TT AA TRUE
#4 rs105076 AA AA TRUE
#5 rs105078 TT GG FALSE
#6 rs105090 AA GG FALSE
#7 rs105162 AC AC TRUE
#8 rs105304 AA TT TRUE
#9 rs105338 AA GG FALSE
#10 rs105490 GG CC TRUE
#11 rs105491 AA AA TRUE
#12 rs105492 AG AG TRUE
#13 rs105705 AC AC TRUE
#14 rs105975 AA GG FALSE
#15 rs106213 AA AA TRUE
#16 rs106396 GG CC TRUE
Приведенное выше предложение заключается в сокращении длины списка. Вы также можете создать отдельный элемент для каждого значения, и это упростит ваш код сравнения
comparison_list <- list(GG = c("GG", "CC"), CC = c("GG", "CC"),
AA = c("AA", "TT"), TT = c("AA", "TT"),
AC = c("AC", "AG"), AG = c("AC", "AG"))
df$boolean <- mapply(function(x, y) any(comparison_list[[x]]==comparison_list[[y]]),
df$ref, df$sample)