【问题标题】:Using the nth element from a list as an input for a function使用列表中的第 n 个元素作为函数的输入
【发布时间】:2018-08-29 22:18:14
【问题描述】:

TLDR:如何从列表中获取 nth 元素以将其用作函数的输入。

我每天在邮件中收到三个不同的 excel 文件:Ayyyymmdd.xlsByyyymmdd.xlsCyyyymmdd.xls(文件名每天都在变化;“yyyy”是年份,“mm" 是月份,"dd" 是天)。

我需要在 R 中读取这些文件。为此,我创建了一个根据今天的日期更改的列表。今天的名单如下:

files <- as.list(c("A20180829.xls", "B20180829.xls", "C20180829.xls")

我现在需要分别阅读所有三个文件(使用lapply 有效,但我想一次只引用一个元素)。不幸的是,以下命令不起作用:

Atoday <- read.xls(files[1], sheet = 1)            # Doesn't work
Atoday <- read.xls("A20180829.xls", sheet = 1)     # Works

我主要关心的是如何从列表中获取 nth 元素以将其用作函数的输入。该函数不需要是read.xls,我只关心它可以是read.csv()fread()等。

【问题讨论】:

  • 读一读list-of-frames:alldat &lt;- sapply(files, read.xls, sheet=1, simplify=FALSE)
  • lapplysapply 将执行此操作,在整个列表上迭代应用命令。
  • 但这正是lapply 的用途:“从列表中取出第n 个元素以将其用作函数的输入”“使用lapply 有效,但我想一次只引用一个元素” 是什么意思? lapply 一次只引用一个元素。我看不出你有任何理由不使用lapply
  • 哦,我的意思是我特别不想使用“lapply”。我想找到一种方法来引用列表中的一个参数。例如,我不想读取所有文件,而是想知道如何读取第 20 个文件。
  • read.xls(files[1], ...) 不起作用的唯一原因是因为 you need files[[1] to index into a list。 (而不是仅仅用“不起作用”来发布它,你应该尝试找出原因并修复它......)

标签: r


【解决方案1】:

它是一个list,所以我们需要[[ 来提取list 元素。 [ 仍然是 listlength 1

read.xls(files[[1]], sheet = 1)

我们可以通过str 或在控制台中输入来找出区别

files[1]
#[[1]]
#[1] "A20180829.xls"

files[[1]]
#[1] "A20180829.xls"

【讨论】:

  • 这正是我想要的。谢谢。虽然我不明白语法。 'files[1]' 返回一个 1 的列表。为什么添加一个额外的 [] 会将其变成一个字符串?
  • @ArturoSbr 正如我所提到的,文件是list。提取list 的元素是使用[[ 完成的。如果您使用单个[,它仍然无法提取该list。请查看?Extract
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-12-08
  • 2015-09-11
  • 2018-05-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多