我真的是R的新手。感谢我能得到的任何帮助。
我有许多文件需要合并为一个数据框,然后得到第2列或第3列的意思。我已经试过但我觉得我犯了一些愚蠢的错误或者它可能完全错了。
polmean <- function(directory, pol, id = 1:3) {
Dataframe <- function (id) {
Filenames <- list.files (pattern = "*.csv")
Reqfiles <- Filenames [id]
LoadReqfiles <- lapply(Reqfiles, read.csv)
}
x <- Dataframe (id)
Colomnmeans <- function (pol, removeNA = TRUE) {
means <- 0
if (pol == "sulfate") {
means <- mean (x[,2], na.rm = removeNA)
} else {
means <- mean (x[,3], na.rm = removeNA)
}
means
}
Colomnmeans (pol, removeNA = TRUE)
}
这给了我一个错误:x [,2]维数不正确。
由于
答案 0 :(得分:1)
你在这里犯了几个错误。
错误#1:函数Dataframe
未返回值。 (见下文)
错误#2:当您使用lapply
时,结果是一个列表。因此,x
是list
个数据框(而不是?data.frame
)。因此,您无法访问数据框列表的不同列。您必须循环数据框。
所以试试这个:
polmean <- function(directory, pol, id = 1:3) {
Dataframe <- function (id) {
Filenames <- list.files(directory,pattern=".csv",full.names=TRUE)
Reqfiles <- Filenames[id]
LoadReqfiles <- lapply(Reqfiles, read.csv)
return(LoadReqfiles) # Mistake1: Need to return the value
}
x <- Dataframe(id)
Colomnmeans <- function (pol, removeNA = TRUE) {
means <- NULL
if (pol == "sulfate") {
for(i in 1:length(x)) means <- c(means,x[[i]][,2])
} else {
for(i in 1:length(x)) means <- c(means,x[[i]][,3])
}
mean(means, na.rm = TRUE)
}
Colomnmeans(pol, removeNA = TRUE)
}
请注意,在上面的代码中,我使用的初始化值为NULL
,这是一个零长度向量。尝试:
length(NULL)
所以这不会使mean
的功能变得混乱,而不是使用0
的初始化值。
希望这会有所帮助!!