【问题标题】:Create new dataset with each iteration of loop使用循环的每次迭代创建新数据集
【发布时间】:2018-07-12 02:39:49
【问题描述】:

我将nums 定义为一个整数向量,包含 1 到 50 之间的 50 个不同随机数

nums = sample(50, replace=TRUE)

我正在尝试创建一个图表,该图表将显示当仅一个特定值 nums[1] 被更改为采用 -97 和 99 之间的一大堆值时,平均值和中位数如何受到影响,这两个值都是距离 1 有 98 个整数。

我想要创建 100 个数据集,其中 nums[1] 在每个数据集中都不同。我正在使用 for 循环将 nums[1] 每次增加 2,这意味着 100 次迭代将使 nums[1] 增加到 99。

nums[[1]] = -97
for(i in 1:100) {
  nums[[1]] = (nums[[1]] + 2)
}

如何创建一个新的数据集,当前值nums[1] 加上nums 中的所有其他值不变?这比看起来更棘手,因为我希望能够遍历这些数据集并显示每个数据集的平均值和中位数。例如,我可以调用mean(nums) 来显示平均值。

但这意味着我需要一个可预测的命名方案,以便我可以循环遍历它们。这甚至可能吗?我正在考虑做类似“创建名为”nums[i] 的新数据集,除了 [] 用于数组中的索引,所以我不知道该怎么做。

从那里,我想我可以将nums[1] 然后nums[2:50] 添加到数据集中,但我一直不知道如何实际创建单独的集合。

编辑:

sets <- lapply(seq(-97, 99, by = 2), function(x) {
    nums[1] = x
    print(nums)
})
for(i in 1:99) {
  x1value = sets[i[1]]
  mean = mean(sets[i])
  median = median(sets[i])
}

使用 lapply,我可以在下面添加以下 for 循环来获取每个数据集的 x[1] 的值,以及每个数据集的平均值和中位数。然后我将如何做同样的事情并将这些值中的每一个放入 ggplot 可以使用的新数据框中?

【问题讨论】:

    标签: r loops


    【解决方案1】:

    你可以这样做

    set.seed(2017)
    nums <- sample(50, replace=TRUE)
    
    lst <- lapply(seq(-97, 99, by = 2), function(x) { nums[1] <- x; nums; })
    

    或使用replace

    lst <- lapply(seq(-97, 99, by = 2), function(x) replace(nums, 1, x))
    

    这两种方法都返回 listinteger vectors,其中每个 vector 的第一个元素已被值 seq(-97, 99, by = 2) 替换。我们最终在list 中添加了length(seq(-97, 99, by = 2)) = 99 元素。

    “我将 nums 定义为 50 个不同随机数的列表(数组)[...]” 请注意 numsinteger vector(不是list 也不是array)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-08-31
      • 1970-01-01
      相关资源
      最近更新 更多