2017-07-13 2 views
0

Ich habe den folgenden Code in R:Wie verwendet man mehrere Ergebniswerte aus einer Funktion in R?

a <- 2 
evaluate <- function(x){ 
    b <- 2*x 
    c <- 3*x 
    d <- 4*x 
    out <- list("b" = b, "c" = c, "d" = d) 
    return(out) 
} 
evaluate(a) 

ich erhalten so etwas wie

$b 
[1] 4 

$c 
[1] 6 

$d 
[1] 8 

Wie kann ich so etwas wie b + c + d berechnen?

+0

'out <- Liste ("b"= b, "c" = c, "d" = d) 'sollte' out CPak

Antwort

3

so viele Optionen

# with 
with(evaluate(a), b + c + d) 
[1] 18 

# unlist the unnamed output object 
sum(unlist(evaluate(a))) 
[1] 18 

# subset a named output object 
result <- evaluate(a) 
result$b + result$c + result$d 
[1] 18 

# subset an unnamed output object 
evaluate(a)$b + evaluate(a)$c + evaluate(a)$d 
[1] 18 

# custom function with fancy arguments 
f <- function(...) { 
    args <- unlist(...) 
    sum(args) 
} 

f(evaluate(a)) 
[1] 18 

Auch +1 aus: @Gregor (Doppelbügel Liste subsetting)

result[["b"]] + result[["c"]] + result[["d"]] 
[1] 18 
+0

Großartig! Vergiss nicht 'result [[" b "]] + result [[" c "]] + result [[" d "]]' – Gregor

+0

Nur noch eine Variante, wenn man nur eine Teilmenge der zurückgegebenen Werte summieren wollte: 'sum (unlist (werte (a) [c (" b "," c "," d ")])) aber deine' with() 'Option ist mein Favorit. – MrFlick

+0

Für mich ist es nicht wichtig, nur "b + c + d" zu berechnen. Dies war nur ein Beispiel. Was ich wollte, war, b, c oder d in anderen Berechnungen zu verwenden. Also ist 'result <- evaluate (a)' und dann 'result $ b' die Antwort, die ich brauchte. – sbac

1

In R können Sie die Liste Mitglieder mit $ Operator Zugriff durch Mitgliedsnamen gefolgt so, im Code, zum Beispiel:

result = evaluate(a) 
result$b + result$c + result$d 
0

Ihre Funktion gibt eine Liste. Sie könnten einen Vektor zurückgeben und dann die sum()-Funktion verwenden, um die Summe der Elemente im Vektor zu berechnen. Wenn Sie eine Liste verwenden müssen, funktioniert die Funktion Reduce() `.

l <- list(2, 3, 4) 
v <- c(2,3,4) 
sum(v) # returns 9 
Reduce("+", l) # returns 9 
Verwandte Themen