मान लें कि मेरे पास लंबाई 100 का वेक्टर वाई है। मैं प्रतिस्थापन के बिना y से 95 मानों का नमूना लेना चाहता हूं और उस नमूने का मतलब लेना चाहता हूं। फिर, नए वेक्टर से, मैं 90 मानों का नमूना लेना चाहता हूं और उस वेक्टर का माध्य लेना चाहता हूं। मैं इसे 20 बार करना चाहता हूं। अंत में, मेरा परिणाम लंबाई 20 का एक वेक्टर होना चाहिए, जिनमें से प्रत्येक एक नमूने का एक माध्य है।

मैं सोच रहा हूं कि इसके लिए लूप काम करेगा लेकिन मुझे यह पता नहीं लग रहा है।

1
Robert Calimente 27 मार्च 2020, 23:22

3 जवाब

ss = seq(from = 95, to = 20, by = -5)
r = length(ss)
i = 1
x = rnorm(100)
for(sampSize in ss){
  x = sample(x, size = sampSize)
  r[i] = mean(x)
  i = i + 1
}
2
James Curran 27 मार्च 2020, 23:36

आप mapply का उपयोग कर सकते हैं।

set.seed(42)
x <- rnorm(100); s <- c(19:1*5,1)

(res <- mapply(function(x, ...) mean(sample(x, ...)), list(x), s))
# [1]  0.07869899  0.04229915  0.03902743  0.01012935  0.05068990 -0.06091937
# [7]  0.01686019  0.15820150  0.03205169 -0.08031480 -0.25243403 -0.14227557
# [13] -0.08546622  0.09478834 -0.13369267  0.09708245  0.20528372  0.17391816
# [19] -0.54889423 -0.36105730

ध्यान दें कि:

length(res) == length(s)
# [1] TRUE
0
jay.sf 28 मार्च 2020, 07:29

यहाँ Reduce के सरल उपयोग के साथ एक संस्करण दिया गया है:

x  <- rnorm(100)
ss <- seq(95, 5, -5)

draws <- Reduce(sample, ss, x, accumulate=TRUE)
means <- sapply(draws, mean)

या एक पंक्ति में:

means <- sapply(Reduce(sample, seq(95, 5, -5), rnorm(100), accumulate=TRUE), mean)
2
Karolis Koncevičius 28 मार्च 2020, 00:09
1
R प्रोग्रामिंग के 10 वर्षों में, मुझे नहीं पता था कि आधार R में Reduce, Map या Filter अभी तक थे। मुझे प्रबुद्ध करने के लिए धन्यवाद।
 – 
Ian Campbell
28 मार्च 2020, 01:41
length(draws[[1]]) == ss[1] से FALSE क्यों मिलता है?
 – 
jay.sf
28 मार्च 2020, 07:35