对R中的多个文件使用readLines

对R中的多个文件使用readLines,r,dataframe,readline,readlines,R,Dataframe,Readline,Readlines,我的问题与主题类似,我想同时加载两个文件。我知道我可以使用函数list.files。然而,我不知道如何正确地应用它,使我的程序将工作。我还想问,如何为每个加载的文件生成两帧数据。下面是我的代码的外观(对于一个文件): txt您可以将代码定义为函数,然后在lappy或sapply中使用它: readfiles <- function(docname){ txt <- stri_read_lines(docname) txt <- txt[txt != ""] r1 &

我的问题与主题类似,我想同时加载两个文件。我知道我可以使用函数list.files。然而,我不知道如何正确地应用它,使我的程序将工作。我还想问,如何为每个加载的文件生成两帧数据。下面是我的代码的外观(对于一个文件):


txt您可以将代码定义为函数,然后在
lappy
sapply
中使用它:

readfiles <- function(docname){
  txt <- stri_read_lines(docname)
  txt <- txt[txt != ""]
  r1 <- strsplit(txt, "")
  r2 <- lengths(r1)
  r3 <- unlist(r1)
  r4 <- rep(seq_along(r1), r2)
  r5 <- unlist(lapply(r2, seq_len))
  TD <- data.frame(
          signs=r3,
          rows=r4,
          columns=r5)
  return(TD)
}

docnames <- list.files(pattern="*.R")
yourdocs <- lapply(docnames, readfiles)
list2env(yourdocs)

readfiles您不能将上述定义为一个函数,并在
lappy
sapply
中调用该函数吗?
所有不起作用的文件@CPak。
lappy
的第二个参数必须是一个命名函数(例如,
lappy(x,readLines,more_args)
或一个匿名函数(例如,
lappy(x,function(i){…})
@r2evans,你是对的。我很粗心,不清楚你想要什么或你的代码试图做什么。你提到了“多个文件”,但我看不到您的代码中提到了文件名。如果您的问题是关于读取文件行,请简化您的代码,使其仅包含与以下内容相关的部分:(a)定义文件名的向量/列表,可以是字面上的,也可以是对类似
list.files
的简单单行调用;以及(b)您试图从这些文件中读取文本。我进一步建议您在预期输出中明确,部分原因是我对“为每个加载的文件生成两帧数据”感到困惑。但是,程序运行不正常,应该为每个文件返回一个数据帧。这里的结果是不同的。例如,
符号因子、935行整数、935列整数、935
它应该是lappy而不是sapply是的,它应该是。您还可以将列表的两个元素转换为只要列表是命名列表,则使用“list2env()”创建两个独立的数据帧
readfiles <- function(docname){
  txt <- stri_read_lines(docname)
  txt <- txt[txt != ""]
  r1 <- strsplit(txt, "")
  r2 <- lengths(r1)
  r3 <- unlist(r1)
  r4 <- rep(seq_along(r1), r2)
  r5 <- unlist(lapply(r2, seq_len))
  TD <- data.frame(
          signs=r3,
          rows=r4,
          columns=r5)
  return(TD)
}

docnames <- list.files(pattern="*.R")
yourdocs <- lapply(docnames, readfiles)
list2env(yourdocs)