函数内的双括号[[]]

时间:2016-07-20 03:12:06

标签: r

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

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

在处理此问题时,我使用的代码行不起作用。有人可以解释为什么吗?  output [i]&lt; - median(df [i])

1 个答案:

答案 0 :(得分:1)

双括号选择列表或data.frame中的单个元素(因为data.frame也是一个列表,因此列是元素)。在这里,我们正在分配每列“df”的中位数。到输出列表。我们正在定义list&#39;输出&#39;,它应该是

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))

<-的lhs很好,但df[i]会返回data.framemedian无效。{1}}相反,它应median(df[[i]])将列提取为vector

数据

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