R需要函数返回列表长度为20的名称

时间:2019-03-06 05:39:06

标签: r

嘿,我非常着迷于此示例中的r设置。我需要一个函数一次绘制一个数字(没有重复的数字)。输出,我希望它是一个长度为20的列表,每个元素都有一个数字标量,代表随机选择的数字。

基本上,我需要将值设置为:“ draw1”,“ draw2”等...

到目前为止,我有类似的东西:

draw <- lapply(x=list(draw=1:80), FUN = sample, size 20, replace = F)

2 个答案:

答案 0 :(得分:0)

如果我错了,我想我得到了我需要的东西,但是我错了。 。

draw <- function(){
     deal <- as.list(sample(1:80, size=20, replace=FALSE))
     names(deal) <- paste("draw", 1:20, sep="")
     return(deal)
}

然后通过调用:

round.one <- draw()
round.one

我得到20个条目的列表,每个条目分别命名为Draw1,Draw2,Draw3等。

答案 1 :(得分:0)

现在,我对您的要求有了进一步的了解,对它们进行了一些修改/改进

  1. 我将draw设为样本数量n的函数;这样便可以轻松绘制不同的样本大小。

  2. 您可以使用setNames来构造list 一次性命名list元素的名称。

我们在一起最终以

    draw <- function(n = 20) setNames(
        as.list(sample(1:80, size = n, replace = FALSE)),
        paste("draw", 1:n, sep=""))

在此情况下,另一个有用的功能是replicate,它使您可以Nrep重复绘制20个样本的过程,并将结果存储在matrix

Nrep <- 10
mat <- replicate(Nrep, draw())
mat
#    [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
#draw1  39   71   18   55   55   26   70   24   30   24
#draw2  64   6    79   63   15   57   77   66   10   45
#draw3  59   36   39   64   42   20   68   33   61   27
#draw4  27   69   49   7    62   24   34   1    6    77
#draw5  62   54   1    13   24   53   15   4    60   17
#draw6  19   23   22   3    52   32   7    55   79   79
#draw7  44   44   73   18   58   64   44   6    58   31
#draw8  12   64   56   67   20   40   6    74   27   40
#draw9  13   33   5    1    49   73   38   46   45   59
#draw10 17   24   58   17   71   61   79   30   66   1
#draw11 56   40   9    12   39   27   4    31   8    48
#draw12 77   29   29   11   65   12   42   73   50   61
#draw13 76   57   64   45   79   13   54   19   11   28
#draw14 9    11   38   33   16   58   41   54   18   60
#draw15 66   74   76   46   32   23   2    7    52   54
#draw16 50   1    63   19   30   51   26   18   39   4
#draw17 20   21   50   79   51   5    75   9    7    69
#draw18 2    60   6    65   1    16   66   42   75   32
#draw19 43   65   23   73   47   63   53   61   44   74
#draw20 69   5    30   5    64   77   20   13   17   13

现在可以轻松地matrix以行(apply(mat, 1, ...))或列方式(apply(mat, 2, ...))进行操作。