将值附加到函数中的向量

时间:2015-06-29 19:51:33

标签: r vector

首先,这是我的代码:

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存储到计数向量中。然而,调用这个脚本给了我一个空的计数向量,所以我测试了每次运行函数时的计数值是什么,它打印出正确的值,除了它似乎计数向量重新初始化为空向量在每次运行函数的开始。发生了什么,我该如何解决这个问题?

2 个答案:

答案 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)