R paste()函数能否生成数值?
我动态生成5个变量,每个变量包含一个随机值:R paste()函数能否生成数值?,r,R,我动态生成5个变量,每个变量包含一个随机值: > i = 1 > > while(i <= 5) { assign(paste("x", i, sep = ""), rnorm(1)) i = i + 1 } > x1 [1] 0.3853609 > x2 [1] 1.626055 > x3 [1] -1.043699 > x4 [1] 0.3449921 > x5 [1] -0.9768416 这不会生成字
> i = 1
>
> while(i <= 5)
{
assign(paste("x", i, sep = ""), rnorm(1))
i = i + 1
}
> x1
[1] 0.3853609
> x2
[1] 1.626055
> x3
[1] -1.043699
> x4
[1] 0.3449921
> x5
[1] -0.9768416
这不会生成字符串,但会显示变量x1
的值。这样,我就可以创建一个循环来显示所有的值
感谢您的帮助。为什么不将它们放在单个列表对象中呢。列表非常适合使用,因为每个元素都可以容纳任何类型的对象,并且可以具有不同的大小,因此不需要保证函数的返回值生成大小相同的输出。在这个简单的例子中,我将使用
replicate
绘制5个独立的随机正态偏差:
n <- 5
x <- replicate( n , rnorm(1) , simplify = FALSE )
[[1]]
[1] 1.820713
[[2]]
[1] -0.2326797
[[3]]
[1] -0.7698173
[[4]]
[1] -0.3954702
[[5]]
[1] -0.5585051
我保证使用5个单独的变量要容易得多。我猜您正在寻找
get
,但您应该知道,您的整个方法与R语言的概念背道而驰。我向你保证,有更好的方法来实现你的最终目标。你可能需要x@Roland这个例子是我试图做的一个过于简化的版本。非常感谢您。”“get”工作得很好。我知道循环在R中不太流行,但我需要创建5个不同的变量。我同意@SimonO101,您应该使用更合适的对象类型,如列表。@SavedByJESUS循环在R中非常流行。但是,您应该仅在需要时使用它们(在您的示例中不是这样)。尤其是while
循环,您几乎不需要。这里不需要复制as.list(rnorm(5))
如果您真的需要一个列表,它可以正常工作。@Roland谢谢。我认为当所评估的函数包含RNG
时,使用replicate
更好(?!)。我承认这些文档并不清楚我为什么要使用replicate
。我想这只是在没有像rnorm
?@imonO101 Compareset.seed(42)这样的向量化函数的情况下;rnorm(5)
带种子集(42);复制(5,rnorm(1))
然后进行基准测试。当您执行类似于replicate(10,mean(runif(5)))的操作时,差异更为重要。
n <- 5
x <- replicate( n , rnorm(1) , simplify = FALSE )
[[1]]
[1] 1.820713
[[2]]
[1] -0.2326797
[[3]]
[1] -0.7698173
[[4]]
[1] -0.3954702
[[5]]
[1] -0.5585051
x[[2]]
[1] -0.2326797