繁体   English   中英

在R中的for循环内使用函数

[英]using functions inside a for loop in R

我已经看到很多与之接近的东西,但实际上并没有解决我遇到的问题。 因此,我的问题是如何处理诸如均值函数之类的函数中的向量值,以及如何将向量值放入标题中。 我最近从SAS切换到R,所以我有点困惑。

###### parameters #####
nphase1=50
nphase2=1000
varcount=5
meanshift= 0
sigmashift= 1


##### phase1 dataset/ control limits #####

for (i in 1:varcount)
{
  assign (paste("x",i, sep=""), (rnorm(nphase1,0,1)))
  mean_var[i]=mean(x[i])
  std_var[i]=sd(x[i])
  Upper_SPC_Limit_Method1_var[i]= mean_var[i] + (3 * std_var[i])
  Lower_SPC_Limit_Method1_var[i]= mean_var[i] - (3 * std_var[i])
  moving_range_var[i]= abs(diff(x[i]))
  MR_mean[i]= mean(moving_range_var[i])
  Upper_SPC_Limit_Method2_var[i] =mean_var[i] + (3 * MR_mean[i])
  Lower_SPC_Limit_Method2_var[i] =mean_var[i] - (3 * MR_mean[i])
}

我敢肯定,我必须做类似于(assign(paste(“ x”,i,sep =“”))的工作,才能将各个标签分别标记为单个限制,但如果无法计算出我想做的是创建5个变量,每个变量有50个观察值(正常随机分布),我想取每个变量的均值和Sd来使用这些数字构造控制极限。

感谢您的见解!

您的变量未命名为x[1]x[2]等,它们的名称为x1x2等。 如果那是您要执行的操作,则可能应该创建一个列表,即x[[i]] <- rnorm(nphase1, 0, 1) ,但是您的代码仍然效率低下。 您应该研究对其进行向量化,将x制成矩阵等。

我相信以下代码可以实现您想要的功能。 我利用了matrix(),with()和apply(),并强烈建议您阅读它们以进行此类工作。

Apply()教程

With()入门

###### parameters #####
nphase1=50
nphase2=1000
varcount=5
meanshift= 0
sigmashift= 1


##### phase1 dataset/ control limits #####

x <- matrix(rnorm(nphase1*varcount, 0, 1), nrow = nphase1, ncol = varcount)
mean_var <- apply(x, 2, mean)
std_var <- apply(x, 2, sd)
df_var <- data.frame(mean_var, std_var)
Upper_SPC_Limit_Method1_var <- with(df_var, mean_var + 3 * std_var)
Lower_SPC_Limit_Method1_var <- with(df_var, mean_var - 3 * std_var)
moving_range_var <- apply(x, 2, function(z) abs(diff(z)))
MR_mean <- apply(moving_range_var, 2, mean)
Upper_SPC_Limit_Method2_var <- with(df_var, mean_var + 3 * MR_mean)
Lower_SPC_Limit_Method2_var <- with(df_var, mean_var - 3 * std_var)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM