Я хочу сохранить некоторые переменные в ячейке столбца в таблице.Затем я хочу вызвать этот столбец и либо вставить имена этих переменных, либо вызвать этот столбец и вставить столбцы, которым эти переменные соответствуют вместе.Кроме того, все это происходит внутри функции, и это единственная оставшаяся часть жесткого кодирования, поэтому я действительно хотел бы найти способ решить эту проблему.
library("tidyverse")
myData<-tibble("c1"=c("a","b","c"),
"c2"=c("1","2","3"),
"c3"=c("A","B","C"),
factors=c(list(c("c1","c2")),list(c("c2","c3")),list(c("c1","c2","c3"))))
myData%>%mutate(factors1=interaction(!!!quos(factors),sep=":",lex.order=TRUE))
# A tibble: 3 x 5
c1 c2 c3 factors factors1
<chr> <chr> <chr> <list> <fct>
1 a 1 A <chr [2]> c1:c2:c1
2 b 2 B <chr [2]> c2:c3:c2
3 c 3 C <chr [3]> c1:c2:c3
Так что это позволяет мне объединитьимена переменных, но, как вы можете видеть, если один список длиннее других, он зацикливается.
Для второй проблемы, в которой я хотел бы использовать столбец $ factor, чтобы специально вызывать значения другихстолбцы, я могу жестко закодировать это так:
myData%>%
mutate(factors2=interaction(!!!syms(c("c1","c2")),sep=":",lex.order=TRUE))
# A tibble: 3 x 5
c1 c2 c3 factors factors2
<chr> <chr> <chr> <list> <fct>
1 a 1 A <chr [2]> a:1
2 b 2 B <chr [2]> b:2
3 c 3 C <chr [3]> c:3
Однако, если я попробую это:
myData%>%
mutate(factors2=interaction(!!!syms(factors),sep=":",lex.order=TRUE))
Error in lapply(.x, .f, ...) : object 'factors' not found
То же самое произойдет, если я попытаюсь отменить список факторов или использовать другие выражения rlang.Я также пытался вложить выражения rlang, но до сих пор не нашел того, который работает так, как я планировал.
Я чувствую, что это то, что должно быть возможным, но до сих пор я не нашел вопрос о переполнении стека или учебник, который бы указывал, что это так, может быть, я в погоне за диким гусем.Спасибо всем за ваше время и помощь.
Мой код полностью:
library("tidyverse")
myData<-tibble("c1"=c("a","b","c"),
"c2"=c("1","2","3"),
"c3"=c("A","B","C"),
factors=c(list(c("c1","c2")),list(c("c2","c3")),list(c("c1","c2","c3"))))%>%
mutate(factors1=interaction(!!!quos(factors),sep=":",lex.order=TRUE))%>%
mutate(factors2=interaction(!!!syms(factors),sep=":",lex.order=TRUE))
Мой желаемый вывод:
# A tibble: 3 x 6
c1 c2 c3 factors factors1 factors2
<chr> <chr> <chr> <list> <fct> <fct>
1 a 1 A <chr [2]> c1:c2 a:1
2 b 2 B <chr [2]> c2:c3 2:B
3 c 3 C <chr [3]> c1:c2:c3 c:3:C