2017-12-27 21 views
5

में किए गए समूहों की एक चर संख्या का उपयोग करके मैं समझना चाहता हूं कि यह कैसे और कैसे टिडवर्स फ्रेमवर्क का उपयोग करके हासिल किया जा सकता है।फ़ंक्शन

मान लें मैं निम्नलिखित सरल कार्य है:

my_fn <- function(list_char) { 
    data.frame(comma_separated = rep(paste0(list_char, collapse = ","),2), 
     second_col = "test", 
     stringsAsFactors = FALSE) 
} 

नीचे दी गई सूची को देखते हुए:

list_char <- list(name = "Chris", city = "London", language = "R") 

मेरी समारोह ठीक काम करता है अगर आप चलाएँ:

my_fn(list_char) 

लेकिन अगर हम बदल वर्णों के वेक्टर वाले कुछ सूची तत्व हम dplyr::do फ़ंक्शन का उपयोग कर सकते हैं निम्नलिखित तरीके से नीचे प्राप्त करने के लिए:

list_char_mult <- list(name = c("Chris", "Mike"), 
         city = c("New York", "London"), language = "R") 

expand.grid(list_char_mult, stringsAsFactors = FALSE) %>% 
    tbl_df() %>% 
    group_by_all() %>% 
    do(my_fn(list(name = .$name, city = .$city, language = "R"))) 

सवाल यह है कि एक समारोह है कि तत्वों की एक चर संख्या के साथ एक सूची के लिए ऐसा कर सकता है लिखने के लिए है। उदाहरण के लिए:

my_fn_generic <- function(list_char_mult) { 
    expand.grid(list_char_mult, stringsAsFactors = FALSE) %>% 
    tbl_df() %>% 
    group_by_all() %>% 
    do(my_fn(...)) 
} 

धन्यवाद

उत्तर

1

के बारे में कैसे चर के साथ समारोह का उपयोग करने के तर्कों की संख्या

my_fn_generic <- function(list_char) { 
    expand.grid(list_char, stringsAsFactors = FALSE) %>% 
    tbl_df() %>% 
    group_by_all() %>% 
    do(do.call(my_fn, list(.))) 
} 
my_fn_generic(list_char_mult) 
# A tibble: 4 x 4 
# Groups: name, city, language [4] 
# name city  language comma_separated 
# <chr> <chr> <chr> <chr>   
#1 Chris London R  Chris,London,R 
#2 Chris New York R  Chris,New York,R 
#3 Mike London R  Mike,London,R 
#4 Mike New York R  Mike,New York,R 

या pmap

library(tidyverse) 
list_char_mult %>% 
    expand.grid(., stringsAsFactors = FALSE) %>% 
    mutate(comma_separated = purrr::pmap_chr(.l = ., .f = paste, sep=", ")) 
# name  city language  comma_separated 
#1 Chris New York  R Chris, New York, R 
#2 Mike New York  R Mike, New York, R 
#3 Chris London  R Chris, London, R 
#4 Mike London  R Mike, London, R 
1

अगर मैं अपने प्रश्न को समझते हैं, आप apply समूहीकरण के बिना इस्तेमाल कर सकते हैं:

expand.grid(list_char_mult, stringsAsFactors = FALSE) %>% 
    mutate(comma_separated = apply(., 1, paste, collapse=",")) 

expand.grid(list_char_mult, stringsAsFactors = FALSE) %>% 
    mutate(comma_separated = apply(., 1, my_fn)) 
name  city language comma_separated 
1 Chris London  R Chris,London,R 
2 Chris New York  R Chris,New York,R 
3 Mike London  R Mike,London,R 
4 Mike New York  R Mike,New York,R 
+0

यह एक पूरी तरह से वैध समाधान है का उपयोग करें, लेकिन यह अगर मैं एक समारोह है कि एक से अधिक पंक्ति के साथ एक data.frame देता था काम नहीं होगा। मैं यह सुनिश्चित करने के लिए अपने प्रश्न को संपादित करूंगा कि यह स्पष्ट हो रहा है। भ्रम के लिए माफ़ी। – Christos