Функция R expand () не принимает список переменных - PullRequest
1 голос
/ 21 апреля 2020

Я пытаюсь использовать функцию expand () для создания комбинаций нескольких переменных в списке векторов. Следующие коды правильно генерируют 27 строк комбинаций, когда перечислены векторы atomi c. Тем не менее, когда я пытаюсь использовать var_list во многих различных формах, это функция expand () не дает желаемого результата из 27 комбинаций. Как я могу использовать var_list для динамического создания комбинаций нескольких столбцов в кадре данных df?

abc <- letters[1:3]
num <- c(1,2,3)
xyz <- letters[24:26]
df <- as.data.frame(cbind(abc,num,xyz))         
combinations_1 <- expand(df,abc,num,xyz)   #This returns 27 combinations

var_list <- c("abc","num","xyz")
combinations_2 <- expand(df,var_list)      #This returns 3 combinations
combinations_3 <- expand(df,df[var_list])  #This returns 3 combinations
combinations_4 <- expand(df,noquote(var_list))  #This returns 3 combinations

Ответы [ 2 ]

2 голосов
/ 21 апреля 2020

Мы можем использовать mget, чтобы вернуть значения имен объектов

expand.grid(mget(var_list))

Или, если нам нужно использовать 'df', просто извлеките с помощью [

expand.grid(df[var_list])

Или используя expand

library(dplyr)
library(tidyr)
expand(df, !!! rlang::syms(var_list))
# A tibble: 27 x 3
#   abc   num   xyz  
#   <fct> <fct> <fct>
# 1 a     1     x    
# 2 a     1     y    
# 3 a     1     z    
# 4 a     2     x    
# 5 a     2     y    
# 6 a     2     z    
# 7 a     3     x    
# 8 a     3     y    
# 9 a     3     z    
#10 b     1     x    
# … with 17 more rows
1 голос
/ 21 апреля 2020

Вы можете создать var_list список символов и склейку.

library(tidyr)

df %>% 
  expand(!!!syms(var_list))

# A tibble: 27 x 3
   abc   num   xyz  
   <fct> <fct> <fct>
 1 a     1     x    
 2 a     1     y    
 3 a     1     z    
 4 a     2     x    
 5 a     2     y    
 6 a     2     z    
 7 a     3     x    
 8 a     3     y    
 9 a     3     z    
10 b     1     x    
# ... with 17 more rows
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...