【问题标题】:Output of a function in R change with the number of inputsR中函数的输出随输入的数量而变化
【发布时间】:2021-08-07 02:38:20
【问题描述】:

我正在尝试使用 R 的 dataRetrieval 包和我创建的名为 getstreamflow 的函数运行从 USGS 网站下载数据的函数。代码如下:

siteNumber <- c("094985005","09498501","09489500","09489499","09498502") 
Streamflow <- sapply(siteNumber, function(siteNumber) tryCatch(getstreamflow(siteNumber), error = function(e) message(paste("Error in station ", siteNumber))))
Streamflow <- Filter(NROW,Streamflow) #to delete empty data frames

我得到了我想要的输出,如下图所示:

但是,当我运行相同的代码但增加输入 siteNumber 中的站数时

输出发生变化,而是在列表中生成多个数据帧。它为每个数据框生成一个列表。

有人知道为什么会这样吗?相同的功能只是改变siteNumber中的站数

【问题讨论】:

  • 问题将更好地针对包作者。您可能在文档中发现了错误或遗漏了注释。在他们的开发页面上提问/提出问题:github.com/usgs/dataRetrieval

标签: r list dataframe function time


【解决方案1】:

根据新数据中显示的图像,list 中的每个元素都嵌套为一个列表。我们可以用[[1]]提取list元素(长度为1),然后应用Filter

out <- Filter(NROW, lapply(Streamflow, function(x) x[[1]]))

当我们使用NROW 时,它也通过了list 的测试,它为listlength 属性返回1,因此所有元素都满足条件TRUE。此外,在上一步中,OP 使用 sapplysapply 是一个有时可以简化输出的函数。而不是sapply 使用lapply(或指定simplify = FALSE

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-22
    • 1970-01-01
    相关资源
    最近更新 更多