Reputation: 772
I have 2 data frames with equal column names. I want to replace a certain expression in 2 columns of multiple data frames. Therefore I wrote the following code:
dat <- data.frame(n = 1:19, des = c("Some very long text", "Some very lang test", "Some vary long text", "Some veri long text", "Another very long text", "Anather very long text", "Another very long text", "Different text", "Diferent text", "More text", "More test", "Much more text", "Muh more text", "Some other long text", "Some otoher long text", "Some more text", "Same more text", "New text", "New texd"), x = c("other text", "bad text", "wrong text", "very bad text", "very nice text","text", "text", "text", "text", "text", "text", "text", "text", "text", "text", "text", "text", "text", "text"))
dat1 <- data.frame(n = 1:5, des = c("very Some long text", "text Some very long", "Some very long text", "long text Some very", "very long Some text"), x = c("crazy text", "very crazy text", "boring text", "very exciting text","ext"))
repla <- function(dat){
vari <- c(which(names(dat) == "x"),which(names(dat) == "des"))
for (i in vari){
dat[,i] <<- gsub("very", "0", dat[,i])
}
}
But why is the repla function not working?
Upvotes: 1
Views: 645
Reputation: 522762
Change your function definition to this:
repla <- function(dat){
vari <- c(which(names(dat) == "x"),which(names(dat) == "des"))
for (i in vari) {
# don't use the parent scope assignment operator here
# instead, just modify the local variable
dat[,i] <- gsub("very", "0", dat[,i])
}
# return modified data frame to the caller
return(dat)
}
And then use it like this:
dat1 <- repla(dat1)
Here is the output of dat1
after using this code:
> dat1
n des x
1 1 0 Some long text crazy text
2 2 text Some 0 long 0 crazy text
3 3 Some 0 long text boring text
4 4 long text Some 0 0 exciting text
5 5 0 long Some text ext
Upvotes: 1