【发布时间】:2020-02-06 00:32:47
【问题描述】:
我正在学习数据分析,我的老师在课堂上提出了一个问题“使用 one-sigma 查找向量 D 中的任何异常值”。他给出了如下答案,但我不明白为什么他在使用函数“for”之前调用 Out=c() 并在函数 c(Out,o) 中再次调用“Out”?你能帮我回答这个问题吗?谢谢!
D=c(4,6,1,2,8,11)
xbar=mean(D)
std=sd(D)
L=xbar-std
U=xbar+std
Out=c()
for(j in 1:length(D)){
if(D[j]<L | D[j]>U) {o=D[j]} else{o=NULL} Out=c(Out,o)}
【问题讨论】:
-
有关
c()的帮助,请在控制台中输入?c。它说c()是一个将值组合成向量或列表的函数。通常,括号内有多个元素,例如c(1, 2, 10)。如果它们是空的,就像这里一样,它相当于写Out = NULL,这意味着创建了一个名为Out的对象,但是它是空的。最后两行中的循环逐渐向其中添加其他元素,因此它从没有元素(空)增长到一个元素,到两个,到三个等等。 -
@JonSpring,请将此作为答案发布!
-
FWIW 这段代码很容易理解,但不是如何在 R 中编码的一个很好的模型...
outliers <- D[abs(scale(D))>1]可以解决同样的问题... -
@JonSpring 在这种情况下,我们是否需要命名匹配的对象?例如:
Out1=c()Out=c(Out1,o)