[[]] vs $:为什么后者在此Datacamp代码上不起作用?

时间:2018-08-22 21:34:25

标签: r

我正在通过Datacamp的R入门课程学习,但是我不明白为什么此代码有效:

# Define columns
columns <- c("trip_distance", "total_amount", "passenger_count")

# Create summary function
taxis_summary <- function(col, data = taxis) {
  c(
    mean = mean(data[[col]]), 
    sd = sd(data[[col]]),
    quantile(data[[col]], c(0.25, 0.5, 0.75))
    )
}

# Use sapply to summarize columns
sapply(columns, taxis_summary)

但是此代码抛出:

  

未知或未初始化的列:“ col”。参数不是数字或   逻辑:返回NA

# Define columns
columns <- c("trip_distance", "total_amount", "passenger_count")

# Create summary function
taxis_summary <- function(col, data = taxis) {
  c(
    mean = mean(data$col), 
    sd = sd(data$col),
    quantile(data$col, c(0.25, 0.5, 0.75))
    )
}

# Use sapply to summarize columns
sapply(columns, taxis_summary)

1 个答案:

答案 0 :(得分:1)

有多种方法可以访问数据帧中的元素。这是R在查找您要查找的列名的方式方面的问题。

一种方法是datacamp使用data [[col]]显示的内容。另一个是$访问器,如data $ col。后者不替代动态函数中的变量。它正在寻找一列字面意义为“ col”的列,并且该错误报告它未找到这样的列。另一方面,通过数据营访问这些列的方式,它能够找到“ trip_distance”,“ total_amount”和“ passenger_count”。