簡體   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