下面的代码是用R写的:

Gems <- data.frame(
  Color = c("Red", "Blue", "Purple", "Orange", 
            "Green", "Pink", "White", "Black", "Yellow"),
  Weight = round(runif(9,0.5,5),2),
  Value = round(abs(rnorm(9,0,5))+0.5,2)
)

InitilzePop <- function(size){
  pop <- (t(sapply(1:size, function(pop) round(runif(nrow(Gems),0, 1), 0))))
  colnames(pop)<- Gems$Color
  return(pop)
}

我想改变代码round(runif(nrow(Gems),0, 1), 0)的这一部分,以一种方式,而不是从随机值生成输出,它从一个向量中获取基于Gems大小的值,例如,

vector <- c(1,1,0,0,0,1,0,1,0,0,1,1,1,0,0,0,0,1,1,1,
            1,1,0,0,1,1,1,0,0,1,1,1,0,0,1,1,1,0)

我想知道是否有可能不使用base::sample().请考虑以下几点:

myvector <- c(1,1,0,0,0,1,0,1,0,0,1,1,1,0,0,0,0,1,1,1,1,1,0,0,1,1,1,0,0,1,1,1,0,0,1,1,1,0)

当调用InitilzePop(2)时,输出将是:

#>      Red Blue Purple Orange Green Pink White Black Yellow
#> [1,]   1    1      0      0     0    1     0     1      0
#> [2,]   0    1      1      1     0    0     0     0      1

矢量是: myvector <- c(1,1,1,1,0,0,1,1,1,0,0,1,1,1,0,0,1,1,1,0)

Hence, next time 当调用InitilzePop(2)时,输出将是:

#>      Red Blue Purple Orange Green Pink White Black Yellow
#> [1,]   1    1      1      1    0    0     1     1      1
#> [2,]   0    0      1      1    1    0     0     1      1

矢量是: myvector <- c(1,0)

推荐答案

这会让你看到所描述的行为.全局分配<<-将在每调用InitilzePop时修改myvector.使用matrix函数可以更容易地(和有效地)构建所需的矩阵.

Gems <- data.frame(
  Color = c("Red", "Blue", "Purple", "Orange", 
            "Green", "Pink", "White", "Black", "Yellow"),
  Weight = round(runif(9,0.5,5),2),
  Value = round(abs(rnorm(9,0,5))+0.5,2)
)

InitilzePop <- function(size) {
  n <- size*nrow(Gems)
  vec <- myvector[1:n]
  myvector <<- myvector[-1:-n]
  matrix(vec, size, nrow(Gems), TRUE, list(NULL, Gems$Color))
}

myvector <- c(1,1,0,0,0,1,0,1,0,0,1,1,1,0,0,0,0,1,1,1,1,1,0,0,1,1,1,0,0,1,1,1,0,0,1,1,1,0)
InitilzePop(2)
#>      Red Blue Purple Orange Green Pink White Black Yellow
#> [1,]   1    1      0      0     0    1     0     1      0
#> [2,]   0    1      1      1     0    0     0     0      1
myvector
#>  [1] 1 1 1 1 0 0 1 1 1 0 0 1 1 1 0 0 1 1 1 0
InitilzePop(2)
#>      Red Blue Purple Orange Green Pink White Black Yellow
#> [1,]   1    1      1      1     0    0     1     1      1
#> [2,]   0    0      1      1     1    0     0     1      1
myvector
#> [1] 1 0

R相关问答推荐

卸载安装了BRM的模型发出的警告

如何使用R中的dhrr函数将李克特量表的因子列从长转换为宽?

在R中创建一个包含转换和转换之间的时间的列

如何编辑ggplot的图例字使用自定义对象(gtable)?'

将数据集中的值增加到当前包含的最大值

如何在R中合并两个基准点?

如何在所有绘图中保持条件值的 colored颜色 相同?

将饼图插入条形图

在RStudio中堆叠条形图和折线图

R:从geom_ol()中删除轮廓并导出为pdf

基于R中的间隔扩展数据集行

为什么在BASE R中绘制线条时会看到线上的点?

正则表达式在第二个管道和第二个T之后拆分R中的列

在R中使用列表(作为tibble列)进行向量化?

将摘要图添加到facet_WRAP gglot的末尾

删除字符串R中的重复项

使用LAG和dplyr执行计算,以便按行和按组迭代

R没有按顺序显示我的有序系数?

如何创建一个由一个连续变量和一个因素变量组成的复杂方框图?

对一个数据帧中另一个数据帧中的值进行计数