我无法将转置()管道传输到R中的lappy中

我无法将转置()管道传输到R中的lappy中,r,datatable,pipe,R,Datatable,Pipe,标题有点复杂,但基本上我有两个步骤可以完成的事情,我不确定为什么不能通过管道完成这两个步骤 library(data.table) library(tidyverse) c1 <- c("Var1 3.4 2.1","Var2 85 45", "Var3 4.5 1.6", "Var4 -8.5 6.1", "Var5 8.4 4.3", "var6 6.5 4

标题有点复杂,但基本上我有两个步骤可以完成的事情,我不确定为什么不能通过管道完成这两个步骤

library(data.table)
library(tidyverse)

c1 <- c("Var1 3.4 2.1","Var2 85 45", "Var3 4.5 1.6", "Var4 -8.5 6.1", "Var5 8.4 4.3", 
        "var6 6.5 4.3", "var7 -8.5 6.6", "var8 4.4 -8.4")
c2 <- c("Var1 3.4 2.1","Var2 85 45", "Var3 4.5 1.6", "Var4 -8.5 6.1", "Var5 8.4 4.3", 
        "var6 6.5 4.3", "var7 -8.5 6.6", "var8 4.4 -8.4")
MWE_List <- list(c1,c2)


MWE_List_2 <- MWE_List %>%
  lapply(., 
         function(x) 
           str_extract_all(x, "-?\\b\\d+\\.?\\d?\\b") %>%
           as.data.table(x) %>%
           transpose(x))
而不是功能内的管道,而是进入下一层的管道:

> MWE_List_2 <- MWE_List %>%
+   lapply(., 
+          function(x) 
+            str_extract_all(x, "-?\\b\\d+\\.?\\d?\\b") %>%
+            as.data.table(x)) %>%
+   lapply(.,function(x) transpose(x))
> MWE_List_2
[[1]]
     V1   V2
1:  3.4  2.1
2:   85   45
3:  4.5  1.6
4: -8.5  6.1
5:  8.4  4.3
6:  6.5  4.3
7: -8.5  6.6
8:  4.4 -8.4

[[2]]
     V1   V2
1:  3.4  2.1
2:   85   45
3:  4.5  1.6
4: -8.5  6.1
5:  8.4  4.3
6:  6.5  4.3
7: -8.5  6.6
8:  4.4 -8.4
>MWE\u列表\u 2%
+重叠(。,
+功能(x)
+str\u extract\u all(x,“-?\\b\\d+\\.\\d?\\b”)%>%
+as.data.table(x))%>%
+lappy(,函数(x)转置(x))
>MWE_列表_2
[[1]]
V1 V2
1:  3.4  2.1
2:   85   45
3:  4.5  1.6
4: -8.5  6.1
5:  8.4  4.3
6:  6.5  4.3
7: -8.5  6.6
8:  4.4 -8.4
[[2]]
V1 V2
1:  3.4  2.1
2:   85   45
3:  4.5  1.6
4: -8.5  6.1
5:  8.4  4.3
6:  6.5  4.3
7: -8.5  6.6
8:  4.4 -8.4

您的示例不可重复,因为
转置
数据的函数。表
purr
。因此,我通过编写
data.table::transpose
进行了更正

但是您的实际问题与这样一个事实有关,即您不需要编写
transpose(x)
,因为您使用的管道
transpose()
就足够了

library(data.table)
library(tidyverse)

c1 <- c("Var1 3.4 2.1","Var2 85 45", "Var3 4.5 1.6", "Var4 -8.5 6.1", "Var5 8.4 4.3", 
        "var6 6.5 4.3", "var7 -8.5 6.6", "var8 4.4 -8.4")
c2 <- c("Var1 3.4 2.1","Var2 85 45", "Var3 4.5 1.6", "Var4 -8.5 6.1", "Var5 8.4 4.3", 
        "var6 6.5 4.3", "var7 -8.5 6.6", "var8 4.4 -8.4")
MWE_List <- list(c1,c2)


MWE_List2 <- MWE_List %>%
 lapply(function(x) 
         str_extract_all(x, "-?\\b\\d+\\.?\\d?\\b") %>%
         as.data.table(x) %>%
         data.table::transpose())

MWE_List3 <- MWE_List %>%
 lapply(function(x) 
         str_extract_all(x, "-?\\b\\d+\\.?\\d?\\b") %>%
         as.data.table(x)) %>%
 lapply(function(x) data.table::transpose(x))

identical(MWE_List2, MWE_List3)
#> [1] TRUE
库(data.table)
图书馆(tidyverse)
c1%
as.data.table(x))%>%
lappy(函数(x)数据表::转置(x))
相同(MWE_列表2、MWE_列表3)
#>[1]是的

PS:当你使用管道时,你不需要在每个函数的开头指定

我倾向于认为
增加了可读性,所以我倾向于尽可能地把它放进去。谢谢你的回答,我有点迷路了。我不知道为什么它可以与
as.data.table(x)
配合使用,我想不把
%>%
作为模板使用
rhs
表达式编写一个新的函数调用更安全。
%%>%%
的设计是将
lhs
求值表达式的值作为参数提供给新函数调用的一个或多个形式参数。
符号允许用户指定与之匹配的形式参数。如果未包含
lhs
的值与
rhs
中的第一个未匹配的正式参数和其他未命名参数匹配,请使用位置匹配。在您的示例中,未命名的arg
x
与正式arg
fill
-非法匹配,因为它不是长度为1的向量。
library(data.table)
library(tidyverse)

c1 <- c("Var1 3.4 2.1","Var2 85 45", "Var3 4.5 1.6", "Var4 -8.5 6.1", "Var5 8.4 4.3", 
        "var6 6.5 4.3", "var7 -8.5 6.6", "var8 4.4 -8.4")
c2 <- c("Var1 3.4 2.1","Var2 85 45", "Var3 4.5 1.6", "Var4 -8.5 6.1", "Var5 8.4 4.3", 
        "var6 6.5 4.3", "var7 -8.5 6.6", "var8 4.4 -8.4")
MWE_List <- list(c1,c2)


MWE_List2 <- MWE_List %>%
 lapply(function(x) 
         str_extract_all(x, "-?\\b\\d+\\.?\\d?\\b") %>%
         as.data.table(x) %>%
         data.table::transpose())

MWE_List3 <- MWE_List %>%
 lapply(function(x) 
         str_extract_all(x, "-?\\b\\d+\\.?\\d?\\b") %>%
         as.data.table(x)) %>%
 lapply(function(x) data.table::transpose(x))

identical(MWE_List2, MWE_List3)
#> [1] TRUE