2015-02-05 1 views
0

Вот типичная проблема, что у меня есть:избежать повторений в R

replace_letters <- function(string){ 
    gsub("x", "a", string) 
} 

string_x_new <- replace_letters("string_x") 
string_y_new <- replace_letters("strxng_y") 
string_z_new <- replace_letters("xstring_z") 
... 

Это означает, что я пишу функцию (функцию в примере произвольно), а затем я хочу, чтобы применить это к произвольному набор объектов. Что является более аккуратным способом сделать это, не повторяя функцию несколько раз (иногда у меня есть длинные списки из 10-15 вызовов одной и той же функции для разных объектов)?

+3

Почему объекты не в векторе? –

+0

Потому что я нооб. Упоминать? – histelheim

+0

'chartr ('x', 'a', strings)' using 'strings' в ответе @CactusWoman – rawr

ответ

3

Положите ваши строки в векторе с использованием C («string_x», «strxng_y», «xstring_z»), а затем использовать применить функцию Пример:

strings<-c("string_x", "strxng_y", "xstring_z") 

replace_letters <- function(string){ 
    gsub("x", "a", string) 
} 

strings <- sapply(strings, replace_letters) 
+2

' gsub ("x", "a", строки) 'также работает (хотя ваш ответ иллюстрирует подход, который будет работать в целом). – Frank

+2

Да, но я думаю, что искатель искал более общий ответ. Это работает для gsub, но не для всех функций. –

+1

@Frank, @CactusWoman: да, 'gsub' - это не вопрос, а как избежать вызова функций несколько раз вручную. – histelheim

1

Вы можете создать векторы объектов, которые вы» d хотел бы применить функцию. Давайте возьмем ваш пример:

new.strings <- sapply(c("string_x", "string_y", "string_z"), replace_letters) 
1

Вы можете использовать векторизации АиР:

strings<-c("string_x", "strxng_y", "xstring_z") 
replace_letters(strings) 
## [1] "string_a" "strang_y" "astring_z" 
+0

означает, что' sapply ', предложенный другими не нужно? – histelheim