2017-08-30 43 views
1

我不是在purrr::modify_if語法中尋求基本的東西。modify_if在數據幀上

假設我想要做一些愚蠢的事情 - 將任何名稱爲2個字符長的變量剪下來。

,這裏是我的嘗試:

library(tidyverse) 
library(stringr) 
library(magrittr) 

mtcars %>% 
    modify_if(~. %>% 
      names %>% 
      str_length %>% 
      equals(2), 
     function(i) 
     cut_number(i, n = 2)) 

我如何通過一組邏輯predictates的第一個參數?

+1

如果'modify_if'正在評估每一列,我不認爲它會知道它的名字。對於每個結果,'purrr :: map(mtcars,names)'或甚至'lapply(mtcars,names)'都返回NULL。 (很高興被證明是錯誤的,但這是我的猜測)。 – thelatemail

+0

你是完全正確的 - 因此,爲什麼這個工程: 'mtcars%>% modify_if(mtcars%>% 名稱%>% str_length%>% 的equals(2), 功能(I) 我%>% cut_interval(n = 2))' – tomw

+1

我想你可以回答你自己的問題,如果你喜歡:-) – thelatemail

回答

1

@thelatemail指出,問題是返回邏輯謂詞的第一個函數需要看到name屬性。修復此作品:

mtcars %>% 
    modify_if(mtcars %>% 
     names %>% 
     str_length %>% 
     equals(2), 
    function(i) 
     i %>% 
     cut_interval(n = 2))