Quantcast
Channel: Active questions tagged r - Stack Overflow
Viewing all articles
Browse latest Browse all 201839

Is there a way to update argument for each call of lapply?

$
0
0

I'm using a function to update my dataframe, the first argument is the dataframe which I want to update, the second one is another dataframe which allows me to update the first one and the third argument is an integer.

I've already used lapply and other function which are similar but in this case I have some trouble to achieve what I want.

Here is an example of my dataframe :

df <- data.frame("Fa" = c("a", "b", "c", "a"),
                 "P" = c(1, 2, 3, 4), stringsAsFactors = FALSE)

Same for the other dataframe:

df2 <- data.frame("CF" = c("a", "b", "c"),
                  "R" = c(1, 2, 3),
                  "ND" = c(1, 2, 3),
                  "DD" = c(1, 2, 3),
                  "DF" = c(1, 2, 3),
                  "NF" = c(1, 2, 3),
                  "AAA" = c(1, 2, 3),
                  "BBB" = c(1, 2, 3),
                  "CCC" = c(1, 2, 3),
                  "DDD" = c(1, 2, 3),
                  "EEE" = c(1, 2, 3),
                  "FFF" = c(1, 2, 3),
                  "S" = c(1, 2, 3), stringsAsFactors = FALSE)

The function I'm using :

my_function <- function(x, y, nb) {
  x[which(x$Fam == as.character(y[nb, "CF"])), "PR"] <- x[which(x$Fam == as.character(y[nb, "CF"])), "P"] * (1 - as.double(y[nb, "R"]))
  x[which(x$Fa == as.character(y[nb, "CF"])), "R"] <- y[nb, "R"]
  x[which(x$Fa == as.character(y[nb, "CF"])), "ND"] <- y[nb, "ND"]
  x[which(x$Fa == as.character(y[nb, "CF"])), "DD"] <- y[nb, "DD"]
  x[which(x$Fa == as.character(y[nb, "CF"])), "DF"] <- y[nb, "DF"]
  x[which(x$Fa == as.character(y[nb, "CF"])), "NF"] <- y[nb, "NF"]
  x[which(x$Fa == as.character(y[nb, "CF"])), "S"] <- y[nb, "S"]
  return (x)
}

Example to see how the function is used :

df <- my_function(df, df2, 1)
df <- my_function(df, df2, 2)
df <- my_function(df, df2, 3)

Basically my aim is to avoid calling my function multiple times, so it's more clear why i've done it 3 times, it's because in my dataframe "df2" i have 3 rows. So I wanted to know if this could be achieve by using lapply or any other method or should I change my function ?


Viewing all articles
Browse latest Browse all 201839

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>