Sampling without replacement from multiple vectors of different length using vector lengths as some sort of weight
I want to take random samples from multiple vectors of different length using vector lengths as some sort of weight, such that more samples are drawn from vectors of larger sizes when compared to smaller ones (proportional sampling of sorts).
To illustrate my point please consider this:
# Generating 100 different individuals
vec1 <- rep( letters , length.out = 100 )
vec2 <- c(1:100)
# Join two above vectors
students <- paste( vec1 , vec2 , sep="" )
The above produces a giant vector of 100 students. Now I am trying to generate 10 random vectors from which the final sampling has to take place.
# Creating 10 vectors of different sizes
a <- split( students , sample(10, 100 , repl = TRUE) )
vec1 <- a$`1`
vec2 <- a$`2`
vec3 <- a$`3`
vec4 <- a$`4`
vec5 <- a$`5`
vec6 <- a$`6`
vec7 <- a$`7`
vec8 <- a$`8`
vec9 <- a$`9`
vec10 <- a$`10`
So, now I have 10 vectors (vec1...vec10) of varying sizes. My goal is to get a final vector with a total of 50 random samples from all the vectors, such that when sampling is done it would be wrt vector length i.e., proportional sampling.
Is something like this possible?
Apologies if this has been asked before!
r
add a comment |
I want to take random samples from multiple vectors of different length using vector lengths as some sort of weight, such that more samples are drawn from vectors of larger sizes when compared to smaller ones (proportional sampling of sorts).
To illustrate my point please consider this:
# Generating 100 different individuals
vec1 <- rep( letters , length.out = 100 )
vec2 <- c(1:100)
# Join two above vectors
students <- paste( vec1 , vec2 , sep="" )
The above produces a giant vector of 100 students. Now I am trying to generate 10 random vectors from which the final sampling has to take place.
# Creating 10 vectors of different sizes
a <- split( students , sample(10, 100 , repl = TRUE) )
vec1 <- a$`1`
vec2 <- a$`2`
vec3 <- a$`3`
vec4 <- a$`4`
vec5 <- a$`5`
vec6 <- a$`6`
vec7 <- a$`7`
vec8 <- a$`8`
vec9 <- a$`9`
vec10 <- a$`10`
So, now I have 10 vectors (vec1...vec10) of varying sizes. My goal is to get a final vector with a total of 50 random samples from all the vectors, such that when sampling is done it would be wrt vector length i.e., proportional sampling.
Is something like this possible?
Apologies if this has been asked before!
r
add a comment |
I want to take random samples from multiple vectors of different length using vector lengths as some sort of weight, such that more samples are drawn from vectors of larger sizes when compared to smaller ones (proportional sampling of sorts).
To illustrate my point please consider this:
# Generating 100 different individuals
vec1 <- rep( letters , length.out = 100 )
vec2 <- c(1:100)
# Join two above vectors
students <- paste( vec1 , vec2 , sep="" )
The above produces a giant vector of 100 students. Now I am trying to generate 10 random vectors from which the final sampling has to take place.
# Creating 10 vectors of different sizes
a <- split( students , sample(10, 100 , repl = TRUE) )
vec1 <- a$`1`
vec2 <- a$`2`
vec3 <- a$`3`
vec4 <- a$`4`
vec5 <- a$`5`
vec6 <- a$`6`
vec7 <- a$`7`
vec8 <- a$`8`
vec9 <- a$`9`
vec10 <- a$`10`
So, now I have 10 vectors (vec1...vec10) of varying sizes. My goal is to get a final vector with a total of 50 random samples from all the vectors, such that when sampling is done it would be wrt vector length i.e., proportional sampling.
Is something like this possible?
Apologies if this has been asked before!
r
I want to take random samples from multiple vectors of different length using vector lengths as some sort of weight, such that more samples are drawn from vectors of larger sizes when compared to smaller ones (proportional sampling of sorts).
To illustrate my point please consider this:
# Generating 100 different individuals
vec1 <- rep( letters , length.out = 100 )
vec2 <- c(1:100)
# Join two above vectors
students <- paste( vec1 , vec2 , sep="" )
The above produces a giant vector of 100 students. Now I am trying to generate 10 random vectors from which the final sampling has to take place.
# Creating 10 vectors of different sizes
a <- split( students , sample(10, 100 , repl = TRUE) )
vec1 <- a$`1`
vec2 <- a$`2`
vec3 <- a$`3`
vec4 <- a$`4`
vec5 <- a$`5`
vec6 <- a$`6`
vec7 <- a$`7`
vec8 <- a$`8`
vec9 <- a$`9`
vec10 <- a$`10`
So, now I have 10 vectors (vec1...vec10) of varying sizes. My goal is to get a final vector with a total of 50 random samples from all the vectors, such that when sampling is done it would be wrt vector length i.e., proportional sampling.
Is something like this possible?
Apologies if this has been asked before!
r
r
asked Nov 14 '18 at 23:15
Shab86Shab86
34
34
add a comment |
add a comment |
1 Answer
1
active
oldest
votes
This will get you approximately 50 students (depending on how a
was split)
new = unlist(lapply(a, function(x) sample(x, round(length(x)/2))))
To get exactly 50 each time, you can do this
ll = sapply(a, length) # Get length of each vector in "a"
target = 50
new_ll = 0
while (sum(new_ll) != target)
new_ll = round(ll * target / sum(ll) + runif(length(ll), -0.5, 0.5))
new = unlist(lapply(1:length(a), function(i) sample(a[[i]], new_ll[i])))
Explanation: Get the length of each vector in a
and assign to ll
. This amounts to doing ll[1] = length(vec1); ll[2] = length(vec2)
and so on. We need to sample a certain amount from each vector in a
such that we get 50 elements (target
). This amount is determined with new_ll
. It is approximately equal to target / num_students
times each vector length.
Since this does not guarantee that target
students are selected each time, we add a little jitter with runif
to move the numbers around slightly, and we continue looping until the the sum of new_ll
is equal to target
.
The final line then iterates i
from 1 through 10 (or the number of vectors in a
) and samples new_ll[i]
from each vector a[[i]]
.
Thanks for your reply! But here, the sampling is done froma
as a whole or does it go list by list withina
, in form ofx
? Also, why have you chosenlength(x)/2
?
– Shab86
Nov 14 '18 at 23:43
lapply
andsapply
perform functions over a list (the list beinga
), so there is no need to split it into ten objects before hand. Thex
is the argument to the custom function used withinlapply
and would equal each vector froma
. I uselength(x)/2
since 50 is half of 100, so about half of each vector should be randomly selected.
– mickey
Nov 14 '18 at 23:46
Awesome reply Mickey! Thanks a ton for your detailed explanations as well. Is therunif
there to add bit off as you say, jitter in selecting a random length (50% or less) from each vector ina
? So that when running thelapply
, for each vector we would sample elements from each vector ina
, of lengthnew_ll
.
– Shab86
Nov 15 '18 at 0:06
Also, one query! This answer of yours especially adding the jitter, was highly inspired one. How did you think about this one? I am learning R now via datacamp & simultaneously using for data analysis @ work. So, I was wondering how does one develop such lateral thinking especially when it comes to R prog?
– Shab86
Nov 15 '18 at 0:10
To your question about the jitter: yes, it's meant to deal with odd-lengthed vectors ina
(e.g. should you choose 4 or 5 elements from a 9-length vector if you want half of them?). Coming up with therunif
was a bit lucky on my part (and it isn't the only way to do things), I just wanted to tweak the sample lengths a bit until it was guaranteed 50 would be chosen. As for lateral thinking, I think you give me too much credit, but you can pick up the quirks and develop your own style by playing around a lot in R and just trying all sorts of random approaches.
– mickey
Nov 15 '18 at 0:19
|
show 2 more comments
Your Answer
StackExchange.ifUsing("editor", function ()
StackExchange.using("externalEditor", function ()
StackExchange.using("snippets", function ()
StackExchange.snippets.init();
);
);
, "code-snippets");
StackExchange.ready(function()
var channelOptions =
tags: "".split(" "),
id: "1"
;
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function()
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled)
StackExchange.using("snippets", function()
createEditor();
);
else
createEditor();
);
function createEditor()
StackExchange.prepareEditor(
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader:
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
,
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
);
);
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53310183%2fsampling-without-replacement-from-multiple-vectors-of-different-length-using-vec%23new-answer', 'question_page');
);
Post as a guest
Required, but never shown
1 Answer
1
active
oldest
votes
1 Answer
1
active
oldest
votes
active
oldest
votes
active
oldest
votes
This will get you approximately 50 students (depending on how a
was split)
new = unlist(lapply(a, function(x) sample(x, round(length(x)/2))))
To get exactly 50 each time, you can do this
ll = sapply(a, length) # Get length of each vector in "a"
target = 50
new_ll = 0
while (sum(new_ll) != target)
new_ll = round(ll * target / sum(ll) + runif(length(ll), -0.5, 0.5))
new = unlist(lapply(1:length(a), function(i) sample(a[[i]], new_ll[i])))
Explanation: Get the length of each vector in a
and assign to ll
. This amounts to doing ll[1] = length(vec1); ll[2] = length(vec2)
and so on. We need to sample a certain amount from each vector in a
such that we get 50 elements (target
). This amount is determined with new_ll
. It is approximately equal to target / num_students
times each vector length.
Since this does not guarantee that target
students are selected each time, we add a little jitter with runif
to move the numbers around slightly, and we continue looping until the the sum of new_ll
is equal to target
.
The final line then iterates i
from 1 through 10 (or the number of vectors in a
) and samples new_ll[i]
from each vector a[[i]]
.
Thanks for your reply! But here, the sampling is done froma
as a whole or does it go list by list withina
, in form ofx
? Also, why have you chosenlength(x)/2
?
– Shab86
Nov 14 '18 at 23:43
lapply
andsapply
perform functions over a list (the list beinga
), so there is no need to split it into ten objects before hand. Thex
is the argument to the custom function used withinlapply
and would equal each vector froma
. I uselength(x)/2
since 50 is half of 100, so about half of each vector should be randomly selected.
– mickey
Nov 14 '18 at 23:46
Awesome reply Mickey! Thanks a ton for your detailed explanations as well. Is therunif
there to add bit off as you say, jitter in selecting a random length (50% or less) from each vector ina
? So that when running thelapply
, for each vector we would sample elements from each vector ina
, of lengthnew_ll
.
– Shab86
Nov 15 '18 at 0:06
Also, one query! This answer of yours especially adding the jitter, was highly inspired one. How did you think about this one? I am learning R now via datacamp & simultaneously using for data analysis @ work. So, I was wondering how does one develop such lateral thinking especially when it comes to R prog?
– Shab86
Nov 15 '18 at 0:10
To your question about the jitter: yes, it's meant to deal with odd-lengthed vectors ina
(e.g. should you choose 4 or 5 elements from a 9-length vector if you want half of them?). Coming up with therunif
was a bit lucky on my part (and it isn't the only way to do things), I just wanted to tweak the sample lengths a bit until it was guaranteed 50 would be chosen. As for lateral thinking, I think you give me too much credit, but you can pick up the quirks and develop your own style by playing around a lot in R and just trying all sorts of random approaches.
– mickey
Nov 15 '18 at 0:19
|
show 2 more comments
This will get you approximately 50 students (depending on how a
was split)
new = unlist(lapply(a, function(x) sample(x, round(length(x)/2))))
To get exactly 50 each time, you can do this
ll = sapply(a, length) # Get length of each vector in "a"
target = 50
new_ll = 0
while (sum(new_ll) != target)
new_ll = round(ll * target / sum(ll) + runif(length(ll), -0.5, 0.5))
new = unlist(lapply(1:length(a), function(i) sample(a[[i]], new_ll[i])))
Explanation: Get the length of each vector in a
and assign to ll
. This amounts to doing ll[1] = length(vec1); ll[2] = length(vec2)
and so on. We need to sample a certain amount from each vector in a
such that we get 50 elements (target
). This amount is determined with new_ll
. It is approximately equal to target / num_students
times each vector length.
Since this does not guarantee that target
students are selected each time, we add a little jitter with runif
to move the numbers around slightly, and we continue looping until the the sum of new_ll
is equal to target
.
The final line then iterates i
from 1 through 10 (or the number of vectors in a
) and samples new_ll[i]
from each vector a[[i]]
.
Thanks for your reply! But here, the sampling is done froma
as a whole or does it go list by list withina
, in form ofx
? Also, why have you chosenlength(x)/2
?
– Shab86
Nov 14 '18 at 23:43
lapply
andsapply
perform functions over a list (the list beinga
), so there is no need to split it into ten objects before hand. Thex
is the argument to the custom function used withinlapply
and would equal each vector froma
. I uselength(x)/2
since 50 is half of 100, so about half of each vector should be randomly selected.
– mickey
Nov 14 '18 at 23:46
Awesome reply Mickey! Thanks a ton for your detailed explanations as well. Is therunif
there to add bit off as you say, jitter in selecting a random length (50% or less) from each vector ina
? So that when running thelapply
, for each vector we would sample elements from each vector ina
, of lengthnew_ll
.
– Shab86
Nov 15 '18 at 0:06
Also, one query! This answer of yours especially adding the jitter, was highly inspired one. How did you think about this one? I am learning R now via datacamp & simultaneously using for data analysis @ work. So, I was wondering how does one develop such lateral thinking especially when it comes to R prog?
– Shab86
Nov 15 '18 at 0:10
To your question about the jitter: yes, it's meant to deal with odd-lengthed vectors ina
(e.g. should you choose 4 or 5 elements from a 9-length vector if you want half of them?). Coming up with therunif
was a bit lucky on my part (and it isn't the only way to do things), I just wanted to tweak the sample lengths a bit until it was guaranteed 50 would be chosen. As for lateral thinking, I think you give me too much credit, but you can pick up the quirks and develop your own style by playing around a lot in R and just trying all sorts of random approaches.
– mickey
Nov 15 '18 at 0:19
|
show 2 more comments
This will get you approximately 50 students (depending on how a
was split)
new = unlist(lapply(a, function(x) sample(x, round(length(x)/2))))
To get exactly 50 each time, you can do this
ll = sapply(a, length) # Get length of each vector in "a"
target = 50
new_ll = 0
while (sum(new_ll) != target)
new_ll = round(ll * target / sum(ll) + runif(length(ll), -0.5, 0.5))
new = unlist(lapply(1:length(a), function(i) sample(a[[i]], new_ll[i])))
Explanation: Get the length of each vector in a
and assign to ll
. This amounts to doing ll[1] = length(vec1); ll[2] = length(vec2)
and so on. We need to sample a certain amount from each vector in a
such that we get 50 elements (target
). This amount is determined with new_ll
. It is approximately equal to target / num_students
times each vector length.
Since this does not guarantee that target
students are selected each time, we add a little jitter with runif
to move the numbers around slightly, and we continue looping until the the sum of new_ll
is equal to target
.
The final line then iterates i
from 1 through 10 (or the number of vectors in a
) and samples new_ll[i]
from each vector a[[i]]
.
This will get you approximately 50 students (depending on how a
was split)
new = unlist(lapply(a, function(x) sample(x, round(length(x)/2))))
To get exactly 50 each time, you can do this
ll = sapply(a, length) # Get length of each vector in "a"
target = 50
new_ll = 0
while (sum(new_ll) != target)
new_ll = round(ll * target / sum(ll) + runif(length(ll), -0.5, 0.5))
new = unlist(lapply(1:length(a), function(i) sample(a[[i]], new_ll[i])))
Explanation: Get the length of each vector in a
and assign to ll
. This amounts to doing ll[1] = length(vec1); ll[2] = length(vec2)
and so on. We need to sample a certain amount from each vector in a
such that we get 50 elements (target
). This amount is determined with new_ll
. It is approximately equal to target / num_students
times each vector length.
Since this does not guarantee that target
students are selected each time, we add a little jitter with runif
to move the numbers around slightly, and we continue looping until the the sum of new_ll
is equal to target
.
The final line then iterates i
from 1 through 10 (or the number of vectors in a
) and samples new_ll[i]
from each vector a[[i]]
.
edited Nov 14 '18 at 23:56
answered Nov 14 '18 at 23:28
mickeymickey
1,4302418
1,4302418
Thanks for your reply! But here, the sampling is done froma
as a whole or does it go list by list withina
, in form ofx
? Also, why have you chosenlength(x)/2
?
– Shab86
Nov 14 '18 at 23:43
lapply
andsapply
perform functions over a list (the list beinga
), so there is no need to split it into ten objects before hand. Thex
is the argument to the custom function used withinlapply
and would equal each vector froma
. I uselength(x)/2
since 50 is half of 100, so about half of each vector should be randomly selected.
– mickey
Nov 14 '18 at 23:46
Awesome reply Mickey! Thanks a ton for your detailed explanations as well. Is therunif
there to add bit off as you say, jitter in selecting a random length (50% or less) from each vector ina
? So that when running thelapply
, for each vector we would sample elements from each vector ina
, of lengthnew_ll
.
– Shab86
Nov 15 '18 at 0:06
Also, one query! This answer of yours especially adding the jitter, was highly inspired one. How did you think about this one? I am learning R now via datacamp & simultaneously using for data analysis @ work. So, I was wondering how does one develop such lateral thinking especially when it comes to R prog?
– Shab86
Nov 15 '18 at 0:10
To your question about the jitter: yes, it's meant to deal with odd-lengthed vectors ina
(e.g. should you choose 4 or 5 elements from a 9-length vector if you want half of them?). Coming up with therunif
was a bit lucky on my part (and it isn't the only way to do things), I just wanted to tweak the sample lengths a bit until it was guaranteed 50 would be chosen. As for lateral thinking, I think you give me too much credit, but you can pick up the quirks and develop your own style by playing around a lot in R and just trying all sorts of random approaches.
– mickey
Nov 15 '18 at 0:19
|
show 2 more comments
Thanks for your reply! But here, the sampling is done froma
as a whole or does it go list by list withina
, in form ofx
? Also, why have you chosenlength(x)/2
?
– Shab86
Nov 14 '18 at 23:43
lapply
andsapply
perform functions over a list (the list beinga
), so there is no need to split it into ten objects before hand. Thex
is the argument to the custom function used withinlapply
and would equal each vector froma
. I uselength(x)/2
since 50 is half of 100, so about half of each vector should be randomly selected.
– mickey
Nov 14 '18 at 23:46
Awesome reply Mickey! Thanks a ton for your detailed explanations as well. Is therunif
there to add bit off as you say, jitter in selecting a random length (50% or less) from each vector ina
? So that when running thelapply
, for each vector we would sample elements from each vector ina
, of lengthnew_ll
.
– Shab86
Nov 15 '18 at 0:06
Also, one query! This answer of yours especially adding the jitter, was highly inspired one. How did you think about this one? I am learning R now via datacamp & simultaneously using for data analysis @ work. So, I was wondering how does one develop such lateral thinking especially when it comes to R prog?
– Shab86
Nov 15 '18 at 0:10
To your question about the jitter: yes, it's meant to deal with odd-lengthed vectors ina
(e.g. should you choose 4 or 5 elements from a 9-length vector if you want half of them?). Coming up with therunif
was a bit lucky on my part (and it isn't the only way to do things), I just wanted to tweak the sample lengths a bit until it was guaranteed 50 would be chosen. As for lateral thinking, I think you give me too much credit, but you can pick up the quirks and develop your own style by playing around a lot in R and just trying all sorts of random approaches.
– mickey
Nov 15 '18 at 0:19
Thanks for your reply! But here, the sampling is done from
a
as a whole or does it go list by list within a
, in form of x
? Also, why have you chosen length(x)/2
?– Shab86
Nov 14 '18 at 23:43
Thanks for your reply! But here, the sampling is done from
a
as a whole or does it go list by list within a
, in form of x
? Also, why have you chosen length(x)/2
?– Shab86
Nov 14 '18 at 23:43
lapply
and sapply
perform functions over a list (the list being a
), so there is no need to split it into ten objects before hand. The x
is the argument to the custom function used within lapply
and would equal each vector from a
. I use length(x)/2
since 50 is half of 100, so about half of each vector should be randomly selected.– mickey
Nov 14 '18 at 23:46
lapply
and sapply
perform functions over a list (the list being a
), so there is no need to split it into ten objects before hand. The x
is the argument to the custom function used within lapply
and would equal each vector from a
. I use length(x)/2
since 50 is half of 100, so about half of each vector should be randomly selected.– mickey
Nov 14 '18 at 23:46
Awesome reply Mickey! Thanks a ton for your detailed explanations as well. Is the
runif
there to add bit off as you say, jitter in selecting a random length (50% or less) from each vector in a
? So that when running the lapply
, for each vector we would sample elements from each vector in a
, of length new_ll
.– Shab86
Nov 15 '18 at 0:06
Awesome reply Mickey! Thanks a ton for your detailed explanations as well. Is the
runif
there to add bit off as you say, jitter in selecting a random length (50% or less) from each vector in a
? So that when running the lapply
, for each vector we would sample elements from each vector in a
, of length new_ll
.– Shab86
Nov 15 '18 at 0:06
Also, one query! This answer of yours especially adding the jitter, was highly inspired one. How did you think about this one? I am learning R now via datacamp & simultaneously using for data analysis @ work. So, I was wondering how does one develop such lateral thinking especially when it comes to R prog?
– Shab86
Nov 15 '18 at 0:10
Also, one query! This answer of yours especially adding the jitter, was highly inspired one. How did you think about this one? I am learning R now via datacamp & simultaneously using for data analysis @ work. So, I was wondering how does one develop such lateral thinking especially when it comes to R prog?
– Shab86
Nov 15 '18 at 0:10
To your question about the jitter: yes, it's meant to deal with odd-lengthed vectors in
a
(e.g. should you choose 4 or 5 elements from a 9-length vector if you want half of them?). Coming up with the runif
was a bit lucky on my part (and it isn't the only way to do things), I just wanted to tweak the sample lengths a bit until it was guaranteed 50 would be chosen. As for lateral thinking, I think you give me too much credit, but you can pick up the quirks and develop your own style by playing around a lot in R and just trying all sorts of random approaches.– mickey
Nov 15 '18 at 0:19
To your question about the jitter: yes, it's meant to deal with odd-lengthed vectors in
a
(e.g. should you choose 4 or 5 elements from a 9-length vector if you want half of them?). Coming up with the runif
was a bit lucky on my part (and it isn't the only way to do things), I just wanted to tweak the sample lengths a bit until it was guaranteed 50 would be chosen. As for lateral thinking, I think you give me too much credit, but you can pick up the quirks and develop your own style by playing around a lot in R and just trying all sorts of random approaches.– mickey
Nov 15 '18 at 0:19
|
show 2 more comments
Thanks for contributing an answer to Stack Overflow!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53310183%2fsampling-without-replacement-from-multiple-vectors-of-different-length-using-vec%23new-answer', 'question_page');
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown