我正在尝试对一列进行模式匹配,并使用用户定义的函数用匹配模式的一部分创建一个新列。
表名为数据,包含
MatchedColumn
24 abcd
32 gcef
45 lmno
代码为
f4<-function()
{
data$NewColumn <- gsub('([0-9]{2}) *','\1',data$MatchedColumn)
}
我将函数调用为f4(),但它并没有执行函数的内部。
但当我单独运行下面的行时,它在匹配后创建了一个新列,生成的表如图所示。
data$NewColumn <- gsub('([0-9]{2}) *','\1',data$MatchedColumn)
数据:
MatchedColumn NewColumn
24 abcd 24
32 gcef 32
45 lmno 45
我尝试使用用户定义的函数,因为我想通过函数传递NewColumn和 MatchedColumn如果有人知道怎么做,请帮忙!
有几个选项:
-
您可以将数据作为参数传递给函数
f4<-function(data, col1, col2) { data[,col1] <- sapply(data[col2], function(x)gsub("[^0-9]", "", x)) return(data) } newdata <- f4(data, 'NewColumn', 'MatchedColumn') str(newdata)
-
您可以使用
<<-
进行全局分配f4<-function(col1, col2) { data[col1] <<- sapply(data[col2], function(x)gsub("[^0-9]", "", x)) } f4('NewColumn', 'MatchedColumn')
我肯定更喜欢的第一个选项