2017-12-25 10 views
6

リストのリストを返す関数があります。リストの結果を分けたいと思います。第2要素の最初の要素。リストの出力をRで分離する方法

x1 <- replicate(4,0.5) 
x2 <- replicate(4,0.7) 
x <- list(x1,x2) 
y <- list(0.5,0.6,0.3,0.4) 
myfu <- function(x,y){ 
    out <- list() 
out$y <- lapply(1:4, function(i){lapply(1:2, function(j) y[[i]]*x[[j]])}) 
return(out) 
} 

この関数は返します:

$y 
$y[[1]] 
$y[[1]][[1]] 
[1] 0.25 0.25 0.25 0.25 

$y[[1]][[2]] 
[1] 0.35 0.35 0.35 0.35 


$y[[2]] 
$y[[2]][[1]] 
[1] 0.3 0.3 0.3 0.3 

$y[[2]][[2]] 
[1] 0.42 0.42 0.42 0.42 


$y[[3]] 
$y[[3]][[1]] 
[1] 0.15 0.15 0.15 0.15 

$y[[3]][[2]] 
[1] 0.21 0.21 0.21 0.21 


$y[[4]] 
$y[[4]][[1]] 
[1] 0.2 0.2 0.2 0.2 

$y[[4]][[2]] 
[1] 0.28 0.28 0.28 0.28 

私の質問は、私はすべてのy[[i]][[2]]からすべてのy[[i]][[1]]を分離することができますどのように、ある はここでの例です。つまり、次のような結果が得られます。

$y 
$y[[1]] 
$y[[1]][[1]] 
[1] 0.25 0.25 0.25 0.25 

$y[[2]] 
$y[[2]][[1]] 
[1] 0.3 0.3 0.3 0.3 

$y[[3]] 
$y[[3]][[1]] 
[1] 0.15 0.15 0.15 0.15 


$y[[4]] 
$y[[4]][[1]] 
[1] 0.2 0.2 0.2 0.2 

2番目の要素と同じ結果が得られます。

答えて

2

を使用することができます。あなたが望むものを手に入れる最も簡単な方法は、lapplyの機能をわずかに変更することです。つまり、

したがって
x1 <- replicate(4,0.5) 
x2 <- replicate(4,0.7) 
x <- list(x1,x2) 
y <- list(0.5,0.6,0.3,0.4) 
myfu <- function(x,y){ 
    out <- list() 
    out$y <- lapply(1:2, function(i){lapply(1:4, function(j) y[[j]]*x[[i]])}) 

    return(out) 
} 

で、出力は次のようになります。

> myfu(x,y) 
$y 
$y[[1]] 
$y[[1]][[1]] 
[1] 0.25 0.25 0.25 0.25 

$y[[1]][[2]] 
[1] 0.3 0.3 0.3 0.3 

$y[[1]][[3]] 
[1] 0.15 0.15 0.15 0.15 

$y[[1]][[4]] 
[1] 0.2 0.2 0.2 0.2 


$y[[2]] 
$y[[2]][[1]] 
[1] 0.35 0.35 0.35 0.35 

$y[[2]][[2]] 
[1] 0.42 0.42 0.42 0.42 

$y[[2]][[3]] 
[1] 0.21 0.21 0.21 0.21 

$y[[2]][[4]] 
[1] 0.28 0.28 0.28 0.28 
7

私たちは、あなたの問題はlapply機能を実現するあなたの方法で発生することがありtranspose

library(purrr) 
myfu(x, y) %>% 
     map(transpose) 
+0

は、あなたの助けのためにどうもありがとうございます。それは本当に素晴らしいです。私たちはその機能の中でそれを使うことができますか? – Alice

+3

@Aliceはい、 'out%>% map(transpose)'を実行してから 'myfu(x、y)'を呼び出すことができます – akrun

+2

問題は 'lapply'関数の実装方法にあると思います。 –

関連する問題