извлечь элементы списка и объединить в строку в r - PullRequest
0 голосов
/ 19 мая 2018

используя список переменных ниже, который я хочу для всех комбинаций, объединить переменные в строку, разделенную "+"

l_ALLVar_list <- c("a","b","c","d","z1","z2","z3") 

У меня есть код для генерации 127 комбинаций

all_combos=do.call("c", lapply(seq_along(l_ALLVar_list), function(i) combn(l_ALLVar_list, i, FUN = list)))

и используя положение 66 в качестве примера

> all_combos[66]
[[1]]
[1] "a"  "b"  "c"  "z2"

Я хочу иметь возможность объединить их элементы с индексом 66 в строку a + b + c + z2

Iпытался

str_c(c(lol[66]),collapse=',')

, но он возвращается, поскольку

c(\"weight\", \"length\", \"wheel_base\", \"city_mpg\")

paste(all_combos[66], collapse = '')

производит то же самое снова

любая помощь будет оценена

Ответы [ 2 ]

0 голосов
/ 19 мая 2018

Используйте lapply, чтобы сделать paste для каждого элемента в вашем списке:

result <- unlist(lapply(all_combos, 
  function(c) do.call(paste, c(as.list(c), sep="+"))))

> result[66:70]
[1] "a+b+c+z2" "a+b+c+z3" "a+b+d+z1" "a+b+d+z2" "a+b+d+z3"
0 голосов
/ 19 мая 2018

Вы можете использовать аргумент FUN в combn до paste всех комбинаций l_ALLVar_list в одном вызове, что устраняет необходимость в вашем списке all_combos.

unlist(lapply(seq_along(l_ALLVar_list), combn, x=l_ALLVar_list, paste, collapse="+"))
#  [1] "a"                "b"                "c"                "d"                "z1"              
#  [6] "z2"               "z3"               "a+b"              "a+c"              "a+d"             
# [11] "a+z1"             "a+z2"             "a+z3"             "b+c"              "b+d"             
# [16] "b+z1"             "b+z2"             "b+z3"             "c+d"              "c+z1"            
# [21] "c+z2"             "c+z3"             "d+z1"             "d+z2"             "d+z3"            
# [26] "z1+z2"            "z1+z3"            "z2+z3"            "a+b+c"            "a+b+d"           
# [31] "a+b+z1"           "a+b+z2"           "a+b+z3"           "a+c+d"            "a+c+z1"          
# [36] "a+c+z2"           "a+c+z3"           "a+d+z1"           "a+d+z2"           "a+d+z3"          
# [41] "a+z1+z2"          "a+z1+z3"          "a+z2+z3"          "b+c+d"            "b+c+z1"          
# [46] "b+c+z2"           "b+c+z3"           "b+d+z1"           "b+d+z2"           "b+d+z3"          
# [51] "b+z1+z2"          "b+z1+z3"          "b+z2+z3"          "c+d+z1"           "c+d+z2"          
# [56] "c+d+z3"           "c+z1+z2"          "c+z1+z3"          "c+z2+z3"          "d+z1+z2"         
# [61] "d+z1+z3"          "d+z2+z3"          "z1+z2+z3"         "a+b+c+d"          "a+b+c+z1"        
# [66] "a+b+c+z2"         "a+b+c+z3"         "a+b+d+z1"         "a+b+d+z2"         "a+b+d+z3"        
# [71] "a+b+z1+z2"        "a+b+z1+z3"        "a+b+z2+z3"        "a+c+d+z1"         "a+c+d+z2"        
# [76] "a+c+d+z3"         "a+c+z1+z2"        "a+c+z1+z3"        "a+c+z2+z3"        "a+d+z1+z2"       
# [81] "a+d+z1+z3"        "a+d+z2+z3"        "a+z1+z2+z3"       "b+c+d+z1"         "b+c+d+z2"        
# [86] "b+c+d+z3"         "b+c+z1+z2"        "b+c+z1+z3"        "b+c+z2+z3"        "b+d+z1+z2"       
# [91] "b+d+z1+z3"        "b+d+z2+z3"        "b+z1+z2+z3"       "c+d+z1+z2"        "c+d+z1+z3"       
# [96] "c+d+z2+z3"        "c+z1+z2+z3"       "d+z1+z2+z3"       "a+b+c+d+z1"       "a+b+c+d+z2"      
#[101] "a+b+c+d+z3"       "a+b+c+z1+z2"      "a+b+c+z1+z3"      "a+b+c+z2+z3"      "a+b+d+z1+z2"     
#[106] "a+b+d+z1+z3"      "a+b+d+z2+z3"      "a+b+z1+z2+z3"     "a+c+d+z1+z2"      "a+c+d+z1+z3"     
#[111] "a+c+d+z2+z3"      "a+c+z1+z2+z3"     "a+d+z1+z2+z3"     "b+c+d+z1+z2"      "b+c+d+z1+z3"     
#[116] "b+c+d+z2+z3"      "b+c+z1+z2+z3"     "b+d+z1+z2+z3"     "c+d+z1+z2+z3"     "a+b+c+d+z1+z2"   
#[121] "a+b+c+d+z1+z3"    "a+b+c+d+z2+z3"    "a+b+c+z1+z2+z3"   "a+b+d+z1+z2+z3"   "a+c+d+z1+z2+z3"  
#[126] "b+c+d+z1+z2+z3"   "a+b+c+d+z1+z2+z3"
...