2015-03-02 5 views
5

में सूची में तत्वों को जोड़ने के लिए तत्वों को जोड़ना, मैं आर में सूची तत्वों को क्रमशः जोड़ना चाहता हूं, ताकि बाद के तत्व पहले बनाए गए तत्वों का उपयोग कर सकें। वांछित व्यवहार निम्नानुसार है:एक चरण

lst <- list(a = 1, 
      b = 2, 
      c = b) 
lst 
## $a 
## [1] 1 
## 
## $b 
## [1] 2 
## 
## $c 
## [1] 2 

मुझे पता है कि मैं आसानी से इसे पूरा कर सकता हूं उदा।

lst <- list(a = 1, 
      b = 2) 
lst[['c']] <- lst[['b']] 

लेकिन मैं सोच रहा था, अगर मैं इसे एक कदम में कर सकता हूं।

उत्तर

5

अद्यतन:

tibble::lst(a = 1, b = 2, c = b) 
## $a 
## [1] 1 
## 
## $b 
## [1] 2 
## 
## $c 
## [1] 2 

मेरे पिछले वैकल्पिक हल mutate उपयोग कर रहा था plyr से:: यह अब tibble पैकेज के lst समारोह के साथ संभव है

mylist <- function(...) plyr::mutate(.data=list(), ...) 

mylist(a = 1, 
     b = 2, 
     c = b) 
## $a 
## [1] 1 
## 
## $b 
## [1] 2 
## 
## $c 
## [1] 2 
6

यहाँ एक और तरीका

है
rev(within(list(), { a = 1; b = 2; c = b })) 
# $a 
# [1] 1 
# 
# $b 
# [1] 2 
# 
# $c 
# [1] 2 
2

एक और अधिक क्लासिक विचार:

mylist = function(...) 
{ 
    args = as.list(substitute(list(...)))[-1]  
    lapply(args, eval, envir = args) 
} 
mylist(a = 1, b = 2, c = a + b) 
#$a 
#[1] 1 
# 
#$b 
#[1] 2 
# 
#$c 
#[1] 3 

एक सख्त पुनरावृत्ति दृष्टिकोण के लिए, एक पाश की जरूरत है:

mylist = function(...) 
{ 
    args = as.list(substitute(list(...)))[-1] 
    for(i in seq_along(args)) args[[i]] = eval(args[[i]], envir = args) 
    return(args) 
} 
mylist(a = 1, b = a + 1, c = b + 1) 
#$a 
#[1] 1 
# 
#$b 
#[1] 2 
# 
#$c 
#[1] 3 
संबंधित मुद्दे