因此,我有一个向量points
,我想用一对点填充,这些点的x和y坐标均匀地分布在0和1之间。
到目前为止,这是我的代码:
n <- 10000
points <- rep(0, n)
for (i in 1:n) {
a <- list(x=runif(1, 0, 1), y=runif(1, 0, 1))
b <- list(x=runif(1, 0, 1), y=runif(1, 0, 1))
replace(points, i, list(a, b))
}
我也尝试了以下方法:
n <- 10000
points <- rep(0, n)
for (i in 1:n) {
a <- list(x=runif(1, 0, 1), y=runif(1, 0, 1))
b <- list(x=runif(1, 0, 1), y=runif(1, 0, 1))
points[i] <- list(a, b)
}
如您所见,a
是x和y均匀分布的第一点,b
是x和y均匀分布的第二点。对于i
中的每个1:n
,我尝试用i
替换points
中的list(a, b)
个元素,但是,我不断收到警告“ “要替换的项目数不是替换长度的倍数”,表明它正在尝试将i
和points
作为单独的元素替换a
中的第b
个元素,而不是将其替换为包含list
和a
的单个b
元素。有什么办法可以哄我做我想做的事?
答案 0 :(得分:1)
尝试使用points <- vector(mode="list",length=n)
将点初始化为列表。
编辑:并使用双方括号进行替换(请参见评论)
答案 1 :(得分:0)
函数runif
已被向量化,因此,如果您一次调用runif
,则代码会更快。本质上,您想要的是获得4 * n
个数字,这些数字均匀地分布在0和1之间,因此您只需要numbers <- runif(4 * n)
。然后,您可以根据需要构造它们。您实际上是否需要一个列表,或者只是使用它来使for
循环更有效?例如matrix(numbers, ncol = 4)
,将为您提供一个矩阵(您可以将列解释为a的x坐标,a的y坐标,b的x坐标和b的y坐标,但实际上不是很重要,因为它们是独立采样的)。如果您发布带有所需输出的示例,我可以更具体些。
答案 2 :(得分:0)
这应该有效。我将每个点a
和b
定义为一个数据框,因为它更方便。点是点列表
points <- list(a = data.frame(x = runif(10000,0,1),y = runif(10000,0,1)), b =data.frame(x = runif(10000,0,1),y = runif(10000,0,1)))
这里得到10分的结果:
> points
$a
x y
1 0.69817192 0.4931020
2 0.08508172 0.5187833
3 0.71519413 0.7871234
4 0.87653502 0.0803383
5 0.57951306 0.4365260
6 0.14673983 0.8060857
7 0.80315435 0.2124616
8 0.79790622 0.6328104
9 0.22130415 0.6239957
10 0.99642466 0.2076050
$b
x y
1 0.3798732 0.419808119
2 0.5833667 0.002143209
3 0.8335923 0.708020370
4 0.1923296 0.322810176
5 0.9421873 0.190519505
6 0.6633320 0.143258369
7 0.7465269 0.071942890
8 0.6919004 0.627667826
9 0.5362267 0.345617737
10 0.1725097 0.476865279