2017-07-13 11 views
0

I持ちRに次のコード: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) 

私は

がどのように私はB + C + Dのようなものを計算することができ

$b 
[1] 4 

$c 
[1] 6 

$d 
[1] 8 

のようなものを得ますか? Rで

+0

'アウト< - リスト( "B"= B、 "c" = c、 "d" = d) 'は' out-sum(b、c、d) 'でなければなりません。 – CPak

答えて

3

非常に多くの選択肢から

また
# 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 

、1:@Gregor(ダブルブラケットリストのサブセット)

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

素晴らしい! 'result [[" b "]] + result [[" c "]] + result [[" d "]]' – Gregor

+0

返された値のサブセットだけを合計したい場合は、あなたの 'with()'オプションは私のお気に入りです。 – MrFlick

+0

私にとって、 'b + c + d'だけを計算することは重要ではありません。これは一例に過ぎません。私が望んだのは、他の計算でb、c、またはdを使うことでした。ですから、 'result < - evaluate(a)'を作ってから 'result $ b'を使って私が必要とした答えです。 – sbac

1

あなたは、たとえば、あなたのコードでは、そのメンバー名が続く$演算子を使用して、リストのメンバーにアクセスすることができます。

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

あなたの関数はリストを返します。ベクトルを返してから、sum()関数を使用してベクトルの要素の合計を計算することができます。リストを使用する必要がある場合、 'Reduce() `関数が機能します。

l <- list(2, 3, 4) 
v <- c(2,3,4) 
sum(v) # returns 9 
Reduce("+", l) # returns 9 
関連する問題