【问题标题】:Create function in R [closed]在R中创建函数[关闭]
【发布时间】:2014-09-03 00:43:58
【问题描述】:

我正在尝试创建一个函数,该函数将采用向量 x 并返回向量 Result,使得 Result[i] 包含 x 向量的标准偏差 i 元素省略

【问题讨论】:

  • 您尝试过什么(请出示您的代码)?具体来说,您所尝试的方法没有按您的预期工作?

标签: r function data-mining


【解决方案1】:

添加到答案组合中

f <- function(x) combn(rev(x), length(x)-1, FUN=sd)
f(1:3)
# [1] 0.7071068 1.4142136 0.7071068

【讨论】:

    【解决方案2】:

    给你:

    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)
    

    【讨论】:

      【解决方案3】:

      只是为了好玩(功能):

      require(functional)
      
      f <- function(x) sapply(seq(length(x)), Compose(`-`, Curry(`[`, x), sd))
      f(1:3)
      ## [1] 0.7071068 1.4142136 0.7071068
      

      【讨论】:

        【解决方案4】:

        这是你要找的吗?

        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 会更好!
        • 嗨,Janos,我想早先对您的回答发表评论,但还没有足够的代表。我确实想知道你为什么选择sapply 而不是for loop?这是速度的事情还是有其他好处? Tnx
        • 通常sapply 更快。它也更优雅、更短。但最重要的是,它可以帮助您摆脱可变的y 变量。一般来说,可变变量很麻烦,它们使程序不是线程安全的。尽可能避免它们是好的,像 R 这样的函数式语言鼓励你这样做。
        • Tnx,这很有意义!
        猜你喜欢
        • 1970-01-01
        • 2012-09-14
        • 2021-08-16
        • 2022-01-12
        • 2016-04-28
        • 2019-04-07
        • 2021-01-12
        • 2014-06-09
        • 1970-01-01
        相关资源
        最近更新 更多