对于具有多个R函数的if条件的循环

时间:2015-05-23 21:24:07

标签: r if-statement for-loop

我是编程新手,并不太了解R中函数背后的逻辑。我想创建一个能够处理四个变量的函数,其中三个条件决定第四个变量的结果;这遍及数据集中的所有情况。为简单起见,假设我的数据框有四个变量(var1到var4),每个变量有100个案例:

f1 <- function(w, x, y, z) {
   for (n in seq_along(w)) {
    if (!is.na(w[n]) & !is.na(x[n]) & !is.na(y[n])){
  z[n]<-0
}else if (!is.na(w[n]) & !is.na(x[n]) & is.na(y[n])){
  z[n]<-1
}else if (!is.na(w[n]) & is.na(x[n]) & is.na(y[n])){
  z[n]<-2
}else if (!is.na(w[n]) & is.na(x[n]) & !is.na(y[n])){
  z[n]<-3
} } }

f1(df$var1, df$var2, df$var3, df$var4)

为什么功能不起作用?

1 个答案:

答案 0 :(得分:1)

您在z内修改的变量f1是本地副本,并且未在原始数据集df中更新。您需要返回修改后的z并将其分配到var4中的df

f1 <- function(w, x, y, z) {
  for (n in seq_along(w)) {
    if (!is.na(w[n]) & !is.na(x[n]) & !is.na(y[n])){
      z[n]<-0
    } else if (!is.na(w[n]) & !is.na(x[n]) & is.na(y[n])) {
      z[n]<-1
    } else if (!is.na(w[n]) & is.na(x[n]) & is.na(y[n])) {
      z[n]<-2
    } else if (!is.na(w[n]) & is.na(x[n]) & !is.na(y[n])) {
      z[n]<-3
    } 
  } 
  z  # <--- return value 
}

然后将f1称为:

df$var4 <- f1(df$var1, df$var2, df$var3, df$var4)