如何在ifelse中使用样本

时间:2016-10-14 20:23:16

标签: r if-statement

我有以下列表

x = rep("a", 100)

如果我使用下表

ifelse(x == "a", sample(c(1:100), 1), 0)

我第一次跑步时得到以下输出。

[1] 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22
[22] 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22
[43] 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22
[64] 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22
[85] 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22

我无法在1到100之间看到随机样本。我应该如何实现它。我想要输出随机性。预期输出的示例如下:

  [1]   8  81  46  71  97  18  37  82  74  34  12   5  26   6  66  55
 [17]   2  84  68   9  29   7  38   4  64  90  39  54  75  45  20  42
 [33]  79  36  78  13  47  85  27  69  23  62  15  63  76  25  77  96
 [49]  98  11  53  83  30  41  91  43  88  28  65  10  49  99  56  67
 [65]  16  95  32  92  14  86  50  80  94  58  21  87  51  17  70   1
 [81]  33  57  59  73  52  22  31  44 100  61  60  35  89  24  48  72
 [97]  40  19   3  93

3 个答案:

答案 0 :(得分:2)

我怀疑ifelse只运行sample()一次,并为条件为TRUE的每个元素返回此随机值。 你可以改为使用

sapply(x,function(y){
    ifelse(y == "a", sample(c(1:100), 1), 0)
})

答案 1 :(得分:1)

如上所述,$("#" + targetid + " input[name=" + name + "][value=" + value + "]").click(); 只生成一个号码。要修复它,sample应如下所示:

ifelse

或者,如果我正确理解你想要什么,甚至更短的版本:

x = rep("a", 100)
ifelse(x == "a", sample(c(1:100), length(x)), 0)

如果你想用替换采样替换你的“非a”值(每个数字可以多次出现),我们终于得到这个代码:

x = rep("a", 100)
ifelse(x == "a", sample(length(x)), 0)

答案 2 :(得分:0)

我试图解释你的问题:

x <- sample(c("a", "b"), 100, replace = TRUE)
res <- rep(0, length(x))
res[which(x == "a")] <- sample(length(x), sum(x == "a"), rep = TRUE)

ifelse(x == "a", sample(c(1:100), 1), 0),我猜你要做的就是这个:

for(i in 1:length(x)){res[i] <- ifelse(x[i] == "a", sample(100, 1), 0)}

所以似乎rep = TRUE是必要的。此外,x == "a"返回一个TRUE / FALSE向量,但它也可以通过as.numeric(x == "a")转换为数字向量,而不是返回1/0。使用不sum的{​​{1}}仍然有效,并会返回as.numeric中等于x的多个元素。