आर

2017-12-25 114 views
6

में किसी सूची के आउटपुट को अलग करने के लिए कैसे करें मेरे पास एक फ़ंक्शन है जो सूची की सूची लौटाता है। मैं सूची के परिणाम को अलग करना चाहता हूं। दूसरे तत्वों के पहले तत्व।आर

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

आपकी समस्या lapply समारोह को लागू करने के अपने तरीके से हो सकता है। जो भी आप चाहते हैं उसे प्राप्त करने का सबसे आसान तरीका आपके 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

हम उपयोग कर सकते हैं transpose

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

आप आपकी मदद के लिए बहुत बहुत धन्यवाद। यह वास्तव में महान है। क्या हम इसे फ़ंक्शन के अंदर इस्तेमाल कर सकते हैं? – Alice

+3

@ एलिस हां, आप '%%>% मानचित्र (ट्रांसपोज़) कर सकते हैं और फिर 'myfu (x, y)' – akrun

+2

पर कॉल करें, मुझे लगता है कि समस्या 'लापता' फ़ंक्शन को कार्यान्वित करने के तरीके में है। –