【问题标题】:Double Bracket [[]] within a Function函数内的双括号 [[]]
【发布时间】:2016-07-20 03:12:05
【问题描述】:

问。编写一个名为 col_median() 的函数,它接受一个参数 df 并返回列中位数的向量。

col_median <- function(df) {
    output <- vector("double", ncol(df))
    for (i in seq_along(df)) {
        output[[i]] <- median(df[[i]])
    }
    output
}

在解决这个问题时,我使用了下面这行不起作用的代码。有人可以解释为什么吗? 输出[i]

【问题讨论】:

    标签: r


    【解决方案1】:

    双括号选择列表或 data.frame 中的单个元素(因为 data.frame 也是一个列表,所以列是元素)。在这里,我们将 'df' 的每一列的中值分配给输出列表。当我们定义一个list'输出'时,它应该是

    col_median <- function(df) {
     output <- vector("list", ncol(df))
     for (i in seq_along(df)) {
        output[[i]] <- median(df[[i]])
       }
     output
    }
    
    col_median(df) #this returns a `list` output
    

    OP 的函数返回一个vector

    如果我们使用

     output[i] <- median(df[i])
    

    通过定义,

    output <- vector("double", ncol(df))
    

    &lt;- 的 lhs 很好,但 df[i] 返回一个 data.framemedian 将无法正常工作。相反,它应该median(df[[i]]) 将该列提取为vector

    数据

    set.seed(24)
    df <- as.data.frame(matrix(sample(1:9, 10*5, replace=TRUE), ncol=5))
    

    【讨论】:

    • @thelatemail 你是对的,但我正在回答[[ 部分
    • 感谢您的详细回复。我是新手。如果可能的话,请举例说明,当你说“...... df[i] 返回一个 data.frame 并且中值不起作用。再次感谢。
    • 这有点难以理解。再次感谢。
    猜你喜欢
    • 1970-01-01
    • 2012-04-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-03
    相关资源
    最近更新 更多