我正在尝试在R中创建一个函数。该函数应该使用z得分从矩阵中找出异常值。该函数应该有两个参数作为输入(x是矩阵,zs是整数)。对于矩阵的每个原始函数,函数应计算每个元素的zscore,如果zscore大于zs
或小于-zs
,则函数应该打印该元素。我知道我可以使用:
z<- (x-mean(x))/sd(x) or z<- scale(x)
对于z得分的计算,但由于我是编程的初学者,我发现因为矩阵而难以解决问题。
答案 0 :(得分:1)
这段代码怎么样:
set.seed(1)
mat <- matrix(rnorm(100), ncol=10)
temp <- abs(apply(mat, 1, scale))
mat[temp > 2]
### [1] 1.9803999 0.2670988 -1.2765922
我的Z限制为2个标准偏差。 首先,我创建一个随机矩阵。 然后我逐行缩放(应用函数的&#39; 1&#39;参数) 我申请了&#39; abs&#39;避免必须在两侧进行测试(&lt;和&gt;),因为测试是对称的 最终它会给你异常值。但你也可能想看看它们在哪里,只需这样做:
image(temp > 2)
编辑:如果你需要它作为输入x和zs的函数,我把它包裹起来:
outliers = function(x, zs) {
temp <- abs(apply(x, 1, scale))
return(x[temp > zs])
}
### > outliers(matrix(rnorm(100), ncol=10), 2)
### [1] 1.9803999 0.2670988 -1.2765922
答案 1 :(得分:0)
myfun <- function(x, zs) {
x1 <- apply(x, 1, scale)
x2 <- (abs(x1) - abs(zs)) > 0
return(x * x2)
}