For循环:将函数的结果保存在每个i的单独向量中

时间:2017-06-25 14:47:13

标签: r for-loop

我有一个包含两列的数据框。一个用于平均值,一个用于标准。偏差。 我想运行for循环并保护

的结果
rnorm(1000,dataframe[i,1],dataframe[i,2])

在名称中包含i的向量中。

喜欢:vector_i,vector_i + 1,vector_i + 2 .....

有什么想法吗?

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])