我无法将 transpose() 通过管道传输到 R 中的 lapply

I cannot pipe a transpose() into a lapply in R

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

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))

产量:

 Error in transpose(., x) : 
  fill must be a length 1 vector, such as the default NA 

而不是在函数内管道而是进入下一个 lapply 确实 :

> 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

您的示例无法重现,因为 transposedata.tablepurrr 的函数。因此,我更正了 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

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