【发布时间】:2020-08-10 14:52:33
【问题描述】:
我一直在练习 R (3.6.3) 的基础知识,但我已经花了好几个小时试图理解这个问题。这是练习:
第一步:生成1到3之间总长度为100的数据序列; #使用 jitter 函数(有一个很大的因素)给你的数据添加噪声 第 2 步:计算滚动平均值的向量 roll.mean 与 5 个连续点的平均值。这个向量只有 96 个平均值。 第 3 步:将这些平均值的向量添加到绘图中 第 4 步:通过使用参数 consec (default=5) 和 y 制作函数来概括第 2 步和第 3 步。
y88 = seq(1,3,0.02)
y = jitter(y88, 120, set.seed(1))
y = y[-99] # removed one guy so y can have 100 elements, as asked
roll.meanT = rep(0,96)
for (i in 1:length(roll.meanT)) # my 'reference i' is roll.mean[i], not y[i]
{
roll.meanT[i] = (y[i+4]+y[i+3]+y[i+2]+y[i+1]+y[i])/5
}
plot(y)
lines(roll.meanT, col=3, lwd=2)
然后,我继续使用一个函数进行概括(它要求我概括步骤 2 和 3,因此忽略了数据创建步骤)并且我认为 y 保持不变):
fun50 = function(consec=5,y)
{
roll.mean <- rep(NA,96) # Apparently, we just leave NA's as NA's, since lenght(y) is always greater than lenght(roll.means)
for (i in 1:96)
{
roll.mean[i] <- mean(y[i:i+consec-1]) # Using mean(), I'm able to generalize.
}
plot(y)
lines(roll.mean, col=3, lwd=2)
}
这给了我一个完全不同的情节:
当我手动尝试查看 mean(y[1:5]) 是否产生正确的均值时,确实如此。我知道我本可以在第一部分中使用 mean() 函数,但我真的很想使用 (y[i+4]+y[i+3]+y[i+2]+ y[i+1]+y[i])/5 或 mean(y[1:5],......)。
【问题讨论】:
标签: r