मान लीजिए मेरे पास एक सूची है और सूची के तत्व को क्रमिक रूप से (एक के बाद एक) चुनना चाहते हैं और इसे फ़ंक्शन में प्लग करना चाहते हैं। यहां मेरा कोड है जहां मैं प्रत्येक तत्व को मैन्युअल रूप से प्लग करता हूं। मैं apply फ़ंक्शंस या for लूप का उपयोग किए बिना इसे स्वचालित रूप से कैसे कर सकता हूं। यानी [[1]] फिर [[2]] कैसे चुनें।

mu1 <- list(2,3,4)
sd1 <- list(0.5,0.6,0.7)
w <- c(0.5,0.2,0.3)
set.seed(123)
mylist <- list(rnorm(10,mu1[[1]],sd1[[1]]),
rnorm(10,mu1[[2]],sd1[[2]]),
rnorm(10,mu1[[3]],sd1[[3]]))
ta <- list(c(0.5,0.6,0.7,0.4,0.3,0.5,0.65,0.2,0.9,0.1),c(0.4,0.6,0.7,0.2,0.3,0.5,0.65,0.2,0.8,0.3),
           c(0.3,0.2,0.7,0.4,0.3,0.5,0.25,0.2,0.6,0.4))
xx <- sum(ta[[1]]*(log(w[1])+dnorm(mylist[[1]],log=T)),ta[[2]]*(log(w[2])+dnorm(mylist[[2]],log = T)),ta[[3]]*
      (log(w[3])+dnorm(mylist[[3]],log = T)))
r
2
user7905871 29 अक्टूबर 2017, 18:29

1 उत्तर

सबसे बढ़िया उत्तर

हम एक for लूप का उपयोग कर सकते हैं

lst <- vector('list', length(ta))
for(i in seq_along(ta)) {
  lst[[i]] <-   sum(ta[[i]]*(log(w[i])+dnorm(mylist[[i]],log=TRUE)))

 }
xx1 <- sum(unlist(lst))
identical(xx, xx1)
#[1] TRUE

या यह 'टा' और 'माईलिस्ट' को एक matrix में परिवर्तित करके किया जा सकता है

xx2 <- sum(do.call(rbind, ta)*(log(w)+ dnorm(do.call(rbind, mylist), log = TRUE)))
identical(xx, xx2)
#[1] TRUE
2
akrun 29 अक्टूबर 2017, 18:41