2017-06-02 40 views
0

功能我有一個功能**:自動爲橫行數據框使用

do_thing <- function(x) { 
    return(x + runif(1, 0, 100)) 
} 

,我想申請我的數據:

df <- tibble(x = 1:10) 

最好有mutate

set.seed(1) 
df %>% 
    mutate(y = do_thing(x)) 

但是,該功能未按預期執行:

#  x y 
# 1  1 27.55087 
# 2  2 28.55087 
# 3  3 29.55087 
# 4  4 30.55087 
# 5  5 31.55087 
# 6  6 32.55087 
# 7  7 33.55087 
# 8  8 34.55087 
# 9  9 35.55087 
# 10 10 36.55087 

其實我希望函數在一個橫行的方式適用於:

df %>% 
    rowwise() %>% 
    mutate(y = do_thing(x)) 

#  x y 
# 1  1 38.21239 
# 2  2 59.28534 
# 3  3 93.82078 
# 4  4 24.16819 
# 5  5 94.83897 
# 6  6 100.46753 
# 7  7 73.07978 
# 8  8 70.91140 
# 9  9 15.17863 
# 10 10 30.59746 

有沒有一種辦法,我也許能重寫我的功能,使得它非常靈活,可以自動默認,同時仍橫行使用單個輸入(即do_thing(100))?

** 實際功能是一個複雜得多

回答

0

而不是獲得runif 1周的觀察,我們可以指定n爲行(n())數據集的數量

set.seed(24) 
df %>% 
    mutate(y = x + runif(n(), 0, 100)) 
# A tibble: 10 x 2 
#  x   y 
# <int>  <dbl> 
# 1  1 46.952549 
# 2  2 61.939816 
# 3  3 94.972191 
# 4  4 102.282408 
# 5  5 8.780258 
# 6  6 63.793740 
# 7  7 80.331417 
# 8  8 32.874240 
# 9  9 39.073652 
#10 10 83.346670 
+0

我的實際功能比'runif'複雜得多::( – emehex

+0

@emehex對不起,這是一種向量化的方法。如果你的功能不靈活,改變原始選項沒有意義 – akrun

相關問題