映射函数将R中函数的结果弄乱

映射函数将R中函数的结果弄乱,r,list,dataframe,function,time,R,List,Dataframe,Function,Time,我正在运行我在R中创建的名为getweather的函数,该函数有三个输入: getweather(站点号、数据类型、路径输出) 该函数的输出有两个列表: 当我使用Map运行函数以避免出现错误时函数停止时,函数的输出(两个列表:列表1和列表3)被合并或组合。代码如下: Results = Map(function(x, y, z) tryCatch(getweather(x, y, z), error = function(e) message(paste("Error in Stat

我正在运行我在R中创建的名为
getweather
的函数,该函数有三个输入:

getweather(站点号、数据类型、路径输出)

该函数的输出有两个列表:

当我使用
Map
运行函数以避免出现错误时函数停止时,函数的输出(两个列表:列表1和列表3)被合并或组合。代码如下:

Results = Map(function(x, y, z) tryCatch(getweather(x, y, z), error = function(e) message(paste("Error in Station", x))), x = siteNumber, y = datatype, z=path_out)
使用
Map
运行该函数的输出是(这里合并了上面图像的列表):

我怎样才能解决这个问题?我希望输出作为第一个图像,但我认为当使用
Map
时,我会弄乱两个输出列表


如果需要,我可以提供完整的功能。

这是怎么回事

  • 在第一次迭代中,
    Map
    将每个输入向量的第一个元素传递给
    getweather

    • x=站点编号[1]
    • y=数据类型[1]
    • z=path_out[1]
  • 在第二次迭代中,
    Map
    将每个输入向量的第二个元素传递给
    getweather
    ,但最后两个元素只有一个元素,因此R将它们循环到
    siteNumber
    的长度:

    • x=站点编号[2]
    • y=数据类型[1]
    • z=path_out[1]
  • 等等

  • 实际上,
    Map
    指令相当于下面的
    lappy
    指令

    Results <- lapply(siteNumber, function(x, y, z) {
      tryCatch(
        getweather(x, y, z), 
        error = function(e) message(paste("Error in Station", x))
      )}, 
      y = datatype,
      z = path_out
    )
    

    结果再次显示为Hi。我再次建议您编写
    get_weather
    函数时,应确保
    tryCatch
    在函数内部。总之,基本上你想把所有的第一个元素合并在一起,然后把第二个元素列成一个新的列表,对吗?尝试
    new\u list我正在使用您建议的lappy函数,但是现在我得到了一个大列表,其中每个数据帧都有一个列表。如何取消列表中数据帧的列表?当我在do.call中执行rbind时,我丢失了dataframes@Sss那些df不是命名为元数据吗?您是否丢失了第一列,
    名称
    ,或行名称?
    Results <- lapply(siteNumber, function(x, y, z) {
      tryCatch(
        getweather(x, y, z), 
        error = function(e) message(paste("Error in Station", x))
      )}, 
      y = datatype,
      z = path_out
    )
    
    df_5_cols <- lapply(Results, '[[', 1)
    df_6_cols <- lapply(Results, '[[', 2)
    
    df_5_cols <- do.call(rbind, df_5_cols)
    Results <- list(df_5_cols, df_6_cols)