2014-10-01 152 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

尝试'NM1 < - LS(图案= “^串\\ d”); lapply(mget(nm1),function(x)(1:nrow(a)%in%c(sapply(x,grep,a $ Contents,fixed = TRUE)))+ 0)' – akrun 2014-10-01 19:04:33

+1

'sapply(c(string1 ,string2),grep,x = a $ Contents,value = TRUE)' – 2014-10-01 19:06:57

回答

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 2014-10-02 17:26:05

+0

@ user3813578。在这里,我假设你的矢量对象名称全部以前缀'string'开头,后面跟着一些'digits'。所以我使用了pat < - paste0(“..',它基本上是粘贴输入字符串后跟任何数字'\\ d'),在下一行'nm1 < - '中,它要求寻找具有指定模式的对象,'envir'参数用于在'global environment'中查找对象,然后使用'mget'返回这些对象的值并返回一个列表,我使用' lapply'作为'lst'是一个'list',然后应用你的函数并将列表追加到dat。 – akrun 2014-10-02 17:36:56

相关问题