【发布时间】:2014-09-03 00:43:58
【问题描述】:
我正在尝试创建一个函数,该函数将采用向量 x 并返回向量 Result,使得 Result[i] 包含 x 向量的标准偏差 与 i 第元素省略。
【问题讨论】:
-
您尝试过什么(请出示您的代码)?具体来说,您所尝试的方法没有按您的预期工作?
标签: r function data-mining
我正在尝试创建一个函数,该函数将采用向量 x 并返回向量 Result,使得 Result[i] 包含 x 向量的标准偏差 与 i 第元素省略。
【问题讨论】:
标签: r function data-mining
添加到答案组合中
f <- function(x) combn(rev(x), length(x)-1, FUN=sd)
f(1:3)
# [1] 0.7071068 1.4142136 0.7071068
【讨论】:
给你:
fun <- function(x) {
sapply(1:length(x), function(i) sd(x[-i]))
}
fun(x)
(仅作记录...)
这是我在看到 @Joost 之前的原始解决方案
fun <- function(x) {
index <- 1:length(x)
sd.without.ith <- function(index) {
sd(x[index != i])
}
sapply(index, sd.without.ith)
}
x <- 40:50
fun(x)
【讨论】:
只是为了好玩(功能):
require(functional)
f <- function(x) sapply(seq(length(x)), Compose(`-`, Curry(`[`, x), sd))
f(1:3)
## [1] 0.7071068 1.4142136 0.7071068
【讨论】:
这是你要找的吗?
f <- function(x){
y <- numeric(0)
for(i in 1:length(x)){
y[i] <- sd(x[-i])
}
return(y)
}
x <- 1:10
> f(x)
[1] 2.738613 2.934469 3.073181 3.162278 3.205897 3.205897 3.162278 3.073181 2.934469 2.738613
【讨论】:
x[-i] 的绝妙技巧!使用sapply 会更好!
sapply 而不是for loop?这是速度的事情还是有其他好处? Tnx
sapply 更快。它也更优雅、更短。但最重要的是,它可以帮助您摆脱可变的y 变量。一般来说,可变变量很麻烦,它们使程序不是线程安全的。尽可能避免它们是好的,像 R 这样的函数式语言鼓励你这样做。