我有一个包含两列的数据框。一个用于平均值,一个用于标准。偏差。 我想运行for循环并保护
的结果rnorm(1000,dataframe[i,1],dataframe[i,2])
在名称中包含i的向量中。
喜欢:vector_i,vector_i + 1,vector_i + 2 .....
有什么想法吗?
答案 0 :(得分:1)
如果你想要一个矩阵,这样的东西?
fun <- function`(mat,nb=1000)
{
tt<- apply(mat, 1, function(x)
{
n<-rnorm(nb,x[,1],x[,2])
return(n)
})
return(tt)
}
fun(mat)
答案 1 :(得分:1)
您可以使用mapply
执行此操作,*apply
是一个rnorm
函数,它为所提供的函数提供多个参数,将相应位置的值应用于其参数。在这种情况下,它将返回一个矩阵,其中列是#set seed for reproducibility
set.seed(1234)
myNorms <- mapply(function(x, mean, sd) rnorm(x, mean, sd), 500, 0:2, c(1, 1, 5))
head(myNorms, 5)
[,1] [,2] [,3]
[1,] -1.2070657 1.9847800 -4.026667
[2,] 0.2774292 -0.2247379 3.507334
[3,] 1.0844412 1.7097262 -5.695726
[4,] -2.3456977 0.8907800 5.176854
[5,] 0.4291247 2.7826079 5.514759
样本。
这是一个简单的例子
colMeans(myNorms)
[1] 0.001838821 0.944966777 2.158396474
这将从每个发行版中抽取500个元素。 {mean 0,sd 1},{mean 1,sd 1}和{mean 2,sd 5}的法线。
我们可以检查手段
apply(myNorms, 2, sd)
[1] 1.0348139 0.9585917 4.6880564
和标准偏差
rnorm
您可以使用data.frame中的向量替换最后两个参数。
跟踪roland在OP中的评论,可以单独使用mapply
而不使用r*
作为mapply
函数系列将为均值采用向量参数(并在适当的时候使用sd) )论点。但它的使用可能与预期略有不同。对于上面的set.seed(1234)
myNorms <- matrix(rnorm(500L * 3L,
mean=rep(0:2, each=500L), sd=rep(c(1, 1, 5), each=500L)),
500)
示例,函数将是
colMeans(myNorms)
[1] 0.001838821 0.944966777 2.158396474
因此,每次随机抽取必须重复所需分布的均值和sd。
要检查,我们采用与上述相同的方法:
>>> n = len(adjazenzListe)-1
>>> for k in range(n,-1,-1):
... print(k, ": ", adjazenzListe[k])