Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/81.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用tidyverse创建一个自动函数,该函数合并从R中的列表中获取的两个数据集,该列表给出合并的数据集_R_Function_Tidyverse - Fatal编程技术网

使用tidyverse创建一个自动函数,该函数合并从R中的列表中获取的两个数据集,该列表给出合并的数据集

使用tidyverse创建一个自动函数,该函数合并从R中的列表中获取的两个数据集,该列表给出合并的数据集,r,function,tidyverse,R,Function,Tidyverse,我想创建一个函数,合并来自同一个列表(列表列表)的两个数据集,每个列表包含多个对象。然而,为了可读性,我将简化我的代码。因此,我的示例只是这个列表中所有对象的一个片段 我正在尝试自动化我的分析,并简化我的工作。因此,创建函数是必要的。如果有可能用tidyverse实现这一点,那将是非常棒的。这是我的背景和我手头的问题 无论如何,这就是我的清单的例子: list(dataset1: list of 2: ..data: config_path: chr "c

我想创建一个函数,合并来自同一个列表(列表列表)的两个数据集,每个列表包含多个对象。然而,为了可读性,我将简化我的代码。因此,我的示例只是这个列表中所有对象的一个片段

我正在尝试自动化我的分析,并简化我的工作。因此,创建函数是必要的。如果有可能用tidyverse实现这一点,那将是非常棒的。这是我的背景和我手头的问题

无论如何,这就是我的清单的例子:

list(dataset1: list of 2:
            ..data: 
       config_path: chr "config_direct/dataset1/"
     dataset2: list of 2:
            ..data: Classes                         
       config_path: chr "config_direct/dataset2/")
它是在波纹管的基础上形成的

ID <- c(101, 102, 2013)
Name <- c("Chris", "Mary", "Ana")
salary <- c(100, 200, 300)

dataset1 <- tibble::tibble(ID, Name, salary)

ID <- c(104, 105, 106)
Name <- c("John", "Christine", "Thomas")
salary <- c(150, 250, 330)

ID我们可以将函数更改为

 merging_datasets <- function(data_standardised = the_list_of_list, obs_names_to_merge,                               
                              merged_data = TRUE) {


      if(merged_data){

       Reduce(function(...) merge(...), data_standarised[obs_names_to_merge])



      }else{

        NULL

      }

    }
或使用

data_standardised %>%
      map(pluck, 'data') %>%
      reduce(left_join)
数据
data\u标准化感谢您的支持。你能解释一下Reduce是什么,函数(…)是什么吗?合并(…)?因为在列表中我有更多的对象、路径等。因此,需要重试数据。我已经用列表中包含的内容更改了代码。希望您的代码能够在不考虑更改的情况下工作。是的,更改了列表的实际列表。非常感谢。我的列表有两个对象。每个对象都有数据和路径。但只希望检索两个对象的数据。但不是路径,因为我对它包含的其他东西不感兴趣。我现在清楚了吗?我已经更新了第一个代码。这是一个剪下来的列表是什么样子的。我希望它更好
 merging_datasets <- function(data_standardised = the_list_of_list, obs_names_to_merge,                               
                              merged_data = TRUE) {


      if(merged_data){

       Reduce(function(...) merge(...), data_standarised[obs_names_to_merge])



      }else{

        NULL

      }

    }
library(purrr)
library(dplyr)
data_standardised  %>%
       map(pluck, 1) %>%
       reduce(left_join)
data_standardised %>%
      map(pluck, 'data') %>%
      reduce(left_join)
data_standardised <- list(dataset1 = list(data = dataset1, config_path = 'xyz'), 
  dataset2 = list(data = dataset2, config_path = 'another xyz'))