R处理子集的方式



我在理解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]时起作用。

谁能解释为什么其他子集不起作用?我花了很长时间才弄明白,尽管我设法使它工作,但我仍然不知道为什么它不能以其他方式工作,我真的想看看黑盒子的内部,这样我以后就不会有同样的问题了。

谢谢你的帮助

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

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

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

美元符号($)只能用于文字列名。避免与

混淆
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$valuedd[, var]

我不太确定为什么你有Nonesubset(),我无法复制这个问题。

最新更新