【问题标题】:Loop over to create new variables from uniform dataframe循环从统一数据框创建新变量
【发布时间】:2021-09-28 04:18:22
【问题描述】:

我的问题如下

我想创建变量 e_1, e_2, e_3, ... , e_50,它们都是由制服 [-1,1] 中的 100 次抽签组成的

这意味着 e_1 是从 U[-1.1]、e_2、..、e_50 绘制的 100 次向量。

这是我认为我可以做的:

periods <- c(1:50)
people <- c(1:100)
for (t in periods){
sprint('e_', t) <- runif(100, -1,1)
}

这不起作用,我真的不知道如何更改它以获得我想要的。

非常感谢您的帮助!!

【问题讨论】:

    标签: r random tidyverse simulation uniform


    【解决方案1】:

    最好不要在全局环境中创建对象。关于代码中的问题,赋值要基于assign

    for(t in periods) {
        assign(sprintf('e_%d', t), runif(100, -1, 1))
    }
    

    一种不会在全局环境中创建多个对象的方法是使用replicate 创建一个list

    lst1 <- replicate(length(periods), runif(100, -1, 1), simplify = FALSE)
    names(lst1) <- sprintf('e_%d', periods)
    

    【讨论】:

    • 嗨阿克伦!它实际上不起作用,当我运行你的 for 循环时,我只能进入。我的全局环境中只有一个变量,即 'e_' 。好的,您的第二种方法,但是我该怎么做 1. 调用列表 e_1、e_2 ... 的每个元素,然后如何将它们作为列放入我的数据框中?
    • @Lola1993 抱歉,我没有检查您的sprintf 命令。更新。它应该是'e_%d',因为t 是数字
    • 啊啊好吧!!!太感谢了!但我真的很喜欢你的建议,即不要在全球环境中保存所有东西,我认为这要好得多。
    • 你有什么方法可以通过 sprint f 之类的来命名列表中的所有元素吗?
    • @Lola1993 关于list的第二个选项,如果你想做一些操作,你可以用lapply循环list,即lapply(lst1, yourfun)
    猜你喜欢
    • 1970-01-01
    • 2016-09-15
    • 1970-01-01
    • 1970-01-01
    • 2017-10-10
    • 2013-08-17
    • 2012-06-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多