2014-10-01 3 views
0

я в настоящее время есть 10 векторов, которые выглядят следующим образом:R функция ввода символов вектора

string1 <- c("house", "home", "cabin") 
string2 <-c("hotel", "hostel", "motel") 

и так далее для 10 строк.

R новичка обучения функций. У меня есть следующий код, который я хочу выполнить через эти 10 строк, и включится в функцию. Этот код берет в этих строках и поиска совпадений и создает новую переменную:

a$string.i <- (1:nrow(a) %in% c(sapply(string1, grep, a$Contents, fixed = TRUE))) +0 

Как я новичок в R, я тупик о том, как превратить это в функцию. Нужно ли сначала определить количество строк, а затем установить 'string1' в приведенном выше коде на x? Как установить имя переменной = на имя строки?

Некоторые образцы данных:

a <- read.table(text='Contents  other 
1  "a house a home"  "111" 
2  "cabin in the woods"  "121"', header=TRUE) 
+1

Try 'NM1 <- л (рисунок = "^ строка \\ д"); lapply (mget (nm1), function (x) (1: nrow (a)% in% c (sapply (x, grep, a $ Contents, fixed = TRUE))) + 0) ' – akrun

+1

' sapply (c (string1 , string2), grep, x = a $ Contents, value = TRUE) ' –

ответ

1

Если вам нужна функция, может быть, вы можете попробовать:

fun1 <- function(namePrefix, dat){ #assuming that the datasets have a common prefix i.e. `string` 
pat <- paste0("^", namePrefix, "\\d") 
nm1 <- ls(pattern=pat, envir=.GlobalEnv) 
lst <- mget(nm1, envir=.GlobalEnv) 
lst2 <- lapply(lst, function(x) 
     (1:nrow(dat) %in% c(sapply(x, grep, dat$Contents, fixed=TRUE)))+0) #your code 
dat[names(lst2)] <- lst2 
dat 

}

fun1("string", a) 
#   Contents other string1 string2 
#1  a house a home 111  1  0 
#2 cabin in the woods 121  1  0 
+0

вы можете прокомментировать, как это работает? Я заблудился в envir = – lmcshane

+0

@ user3813578. Здесь я предполагаю, что имена ваших векторных объектов начинаются с префикса 'string', за которым следуют некоторые« цифры ». Поэтому я использовал строку 'pat <- paste0 (« .. », которая в основном вставляет строку« string », за которой следует любая цифра' \\ d'. В следующей строке 'nm1 <-', она просит искать объекты с указанным шаблоном, которые определены. Аргумент 'envir' - это поиск объектов в« глобальной среде ». Затем я использую' mget' для возврата значения этих объектов и возвращает список. Я использовал ' lapply' как 'lst' - это' list', а затем применил вашу функцию и добавляет список в dat. – akrun

Смежные вопросы