【问题标题】:Appending to a list of objects附加到对象列表
【发布时间】:2014-12-10 08:51:29
【问题描述】:

我正在尝试在 R 中获取复杂对象(文件连接)的列表。 有一个带有文件名的字符向量。我想用 file() 打开每个文件并将其连接对象存储在某个地方(以便以后能够关闭它们)。文件名向量的长度是可变的。我想做的是:

files <- c("file1", "file2", "file3") #just for example
f <- list()
for (i in 1:length(files))
{
  f<- append(f, file(files[i], open="wt"))
}

不幸的是 f 变成了一个整数列表,我不能对其元素运行 close()

我需要它来保留连接对象的列表:

list(file("fname1"),file("fname2"),file("fname3"))

如果您在循环下将 append() 替换为 list(),它不会将连接转换为整数,但这将是列表等列表的列表。

【问题讨论】:

  • files_connections &lt;- lapply(files, function(f) file(f, open="wt"))files_connections &lt;- lapply(files, file, "wt")files_connections &lt;- lapply(files, file, open="wt")
  • 你也可以这样做(未测试)f[[i] &lt;- file(files[i], open = "wt")
  • @DrDom,请考虑添加您的评论作为答案!

标签: r


【解决方案1】:

迭代地将项目附加到列表中不是 R 样式。使用lapply 函数更正确,该函数遍历给定对象,应用用户定义的函数并返回列表。三个调用应该给出相同的结果(未测试)。

files_connections <- lapply(files, function(f) file(f, open="wt"))
files_connections <- lapply(files, file, "wt")
files_connections <- lapply(files, file, open="wt")

【讨论】:

    猜你喜欢
    • 2020-12-19
    • 2021-12-10
    • 1970-01-01
    • 1970-01-01
    • 2015-11-14
    • 2020-04-18
    • 1970-01-01
    • 2015-09-28
    • 2017-11-17
    相关资源
    最近更新 更多