尝试使用 rnorm 函数模拟数据集时遇到语法错误 数据创建代码

问题描述

我正在做一个研究项目,我研究了 50 组不同实验室老鼠的体重增加情况。每周我都会记录每组大鼠的平均体重以及体重的标准偏差。目前,我有 4 组大鼠 15 周的数据,但是,我需要所有 50 组大鼠的 15 周数据。 (我每 15 周接受 4 组新大鼠)。

为了我的研究,我将每周数据记录到两个不同的数据框中。数据框 1 是每个大鼠组的 Mean_Weight df,看起来像这样:

Mean_Data <- data.frame( Group_1 = runif(15),Group_2 = runif(15),Group_3 = runif(15),Group_4 = runif(15) )

数据框 2 是每个大鼠组的 STD_Weight df,看起来像这样:

STD_Data <- data.frame( Group_1 = runif(15),Group_4 = runif(15) )

我即将面临时间紧缩,无法等待获得完整的数据集,因此我尝试使用 rnorm 函数来规避这种不便。为了满足我的需要,使用 rnorm 函数的语法如下所示:

rnorm(50,mean= *,sd=*]) 

我的问题是我不知道如何在 rnomrm 函数中正确编码 mean 和 sd 参数的值。理想情况下,我只想使用 Mean_Data 和 STD_Data dfs 中每个单元格的值。完成后,它看起来像这样:

rnorm(50,mean= Mean_Data[1,1],sd=STD_Data[1,1]) 
rnorm(50,2],2]) 
rnorm(50,3],3]) 
rnorm(50,4],4]) 
.
.
.
 rnorm(50,mean= Mean_Data[15,sd=STD_Data[15,4])

有人可以帮助我编写某种循环或应用函数,这样我就不必手动将均值和 sd 值输入到每个 rnorm 函数的均值和 sd 参数值中吗?

解决方法

你可以这样做

rnormList <- lapply(names(Mean_Data),function(groupdId) {
  lapply(1:NROW(Mean_Data),function(k) {
    rnorm(n = 50,mean = Mean_Data[[groupdId]][k],sd = STD_Data[[groupdId]][k])
  })
})

要知道什么是什么,您还可以添加名称,例如

rnormList <- setNames(lapply(names(Mean_Data),function(groupdId) {
  setNames(lapply(1:NROW(Mean_Data),sd = STD_Data[[groupdId]][k])
  }),paste0("mean=",Mean_Data[[groupdId]],",sd=",STD_Data[[groupdId]]))
}),names(Mean_Data))
,

这是一个双 Map 单行。

rand_list <- Map(function(M,S) {do.call(cbind,Map(function(m,s) rnorm(50,m,s),M,S))},Mean_Data,STD_Data)

str(rand_list)
#List of 4
# $ Group_1: num [1:50,1:15] 0.452 0.447 0.461 0.433 0.457 ...
# $ Group_2: num [1:50,1:15] -0.3543 0.6925 -0.0813 -0.3047 0.6171 ...
# $ Group_3: num [1:50,1:15] -0.2151 -0.18883 0.00794 0.04713 0.05671 ...
# $ Group_4: num [1:50,1:15] 0.911 0.573 0.927 0.626 0.892 ...

列表成员可以被任何一个访问

rand_list$Group_1
rand_list[["Group_1"]]
rand_list[[1]]

数据创建代码

以下在创建均值和标准差数据集之前设置 RNG 种子。

set.seed(2021)    # Make the results reproducible
Mean_Data <- data.frame( Group_1 = runif(15),Group_2 = runif(15),Group_3 = runif(15),Group_4 = runif(15) )
STD_Data <- data.frame( Group_1 = runif(15),Group_4 = runif(15) )

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...