我在理解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]
时才有用。
任何人都可以解释为什么其他子项不起作用?我花了很长时间才弄明白,即使我设法使它工作,我仍然不知道为什么它不能在其他方面工作,我真的想看看黑盒内,所以我不会将来会有同样的问题。
感谢您的帮助。
答案 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$variable
和subset(new_frame, select = variable)
都会在数据框中查找名称为variable
的列。
另一方面,使用new_frame[, variable]
使用f(directory, variable, number_seq)
中的变量名来选择列。