簡體   English   中英

tidyverse 中的 Function

[英]Function in tidyverse

我想用中間 function 創建 tidyverse。 我有一個結構

temp1 = sapply(df, function(x) .....)
temp2 = sapply(temp1, function(x) .......... )
temp3 = sapply(df, function(x) ..........)
temp = data.frame(temp2/temp3)

我想得到這樣的東西

sapply(df, function(x) .......) %>% sapply(df, function(x) ....... )
 %>% ......

可重現的例子:

df = data.frame(a = c(1,2,3), b = c(1,2,3))
temp1 = sapply(df, function(x) x*3)
temp2 = sapply(temp1, function(x) x+4 )
temp3 = sapply(df, function(x) x/4)
temp = data.frame(temp2/temp3)

據我所知,pipe 運算符不記得鏈的第一個塊,只記得前一個塊,因此您必須使用中間步驟。

但是,您可以將代碼的第一部分簡化為管道:

temp1 = df %>% sapply(function(x) x*3) %>% sapply(function(x) x+4)
temp = temp1/sapply(df, function(x) x/4)

假設您在每一列上執行的函數比顯示的函數更復雜,您可以使用purrr函數,例如:

library(purrr)

map2_df(map(df, ~.x * 3 + 4), map(df, ~.x/4), `/`)

#    a     b
#  <dbl> <dbl>
#1  28    28  
#2  20    20  
#3  17.3  17.3

您可以使用括號包裹整個 pipe 鏈並將其用作數據框。

(df %>% sapply(., function(x) x*3) %>% sapply(., function(x) x+4 )) / 
  (df %>% sapply(., function(x) x/4) )

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM