首先,这是我的代码:
count <- vector()
f1 <- function(x) {
file <- read.csv(x)
date <- grep(pattern = "lalala", names(file))
file <- file[date]
file.row <- unlist(file)
num <- length(unique(file.row))
count <- c(count, num)
}
files <- list.files(path="path/to/directory", pattern="*.csv", full.names=TRUE)
lapply(files, f1)
我试图将一个整数num存储到计数向量中。然而,调用这个脚本给了我一个空的计数向量,所以我测试了每次运行函数时的计数值是什么,它打印出正确的值,除了它似乎计数向量重新初始化为空向量在每次运行函数的开始。发生了什么,我该如何解决这个问题?
答案 0 :(得分:2)
如果我理解正确,你想要的只是
f1 <- function(x) {
file <- read.csv(x)
date <- grep(pattern = "lalala", names(file))
file <- file[date]
file.row <- unlist(file)
num <- length(unique(file.row))
num ## implicitly return `num`
}
files <- list.files(path="path/to/directory", pattern="*.csv", full.names=TRUE)
lapply(files, f1)
注意这个(lapply()
)将返回一个列表,因此您可能希望使用sapply()
来简化它:
sapply(files, f1)
请注意,您无需在return()
中明确致电f1()
,因为这已经为您完成了。
答案 1 :(得分:1)
没有经过测试,但是弗兰克说得对,你应该只计算return()
你的计数,然后让apply函数进行追加。我切换到sapply
所以你应该得到一个向量而不是列表:
f1 <- function(x) {
file <- read.csv(x)
date <- grep(pattern = "lalala", names(file))
file <- file[date]
file.row <- unlist(file)
return(length(unique(file.row)))
}
files <- list.files(path="path/to/directory", pattern="*.csv", full.names=TRUE)
count = sapply(files, f1)