R处理子集的方式

时间:2014-05-15 15:50:19

标签: r subset

我在理解R如何在内部处理子集时遇到了一些麻烦,这在尝试构建一些函数时引起了一些问题。请使用以下代码:

f <- function(directory, variable, number_seq) {

  ##Create a empty data frame

  new_frame <- data.frame()

  ## Add every data frame in the directory whose name is in the number_seq to new_frame
  ## the file variable specify the path to the file

  for (i in number_seq){
    file <- paste("~/", directory, "/",sprintf("%03d", i), ".csv", sep = "")
    x <- read.csv(file)
    new_frame <- rbind.data.frame(new_frame, x)
    }

  ## calculate and return the mean
  mean(new_frame[, variable], na.rm = TRUE)*
  }

*在计算平均值时,我尝试首先使用$符号new_frame$variable和子集函数subset( new_frame, select = variable进行子集,但它只会返回None值。它只在我使用new_frame[, variable]时才有用。

任何人都可以解释为什么其他子项不起作用?我花了很长时间才弄明白,即使我设法使它工作,我仍然不知道为什么它不能在其他方面工作,我真的想看看黑盒内,所以我不会将来会有同样的问题。

感谢您的帮助。

2 个答案:

答案 0 :(得分:1)

美元符号($)只能与文字列名一起使用。这避免了与

的混淆
dd<-data.frame(
    id=1:4,
    var=rnorm(4),
    value=runif(4)
)
var <- "value"
dd$var

在这种情况下,如果$采用变量或列名称,您期望哪个? dd$var列或dd$value列(因为var == "value")。这就是dd[, var]方式不同的原因,因为它只接受字符向量,而不是表示列名称的表达式。您将dd$value获得dd[, var]

我不太确定为什么None subset() {{1}}我无法复制该问题。

答案 1 :(得分:1)

此行为与您在函数内部进行子集化的事实有关。

new_frame$variablesubset(new_frame, select = variable)都会在数据框中查找名称为variable的列。

另一方面,使用new_frame[, variable]使用f(directory, variable, number_seq)中的变量名来选择列。