R函数使用的参数是固定的?

R function used argument is fixed?

我对另一个问题有疑问,但我尝试将其分解为更简单的代码,以便可以看到我最初的问题。我尝试制作一个数据框和一个计算总和的函数,如下所示:

df <- data.frame(x=c(1,2,3),y=c(1,2,3))

fun <- function(data,x,y){

    z <- sum(data$x) + sum(data$y)
    return(z)
}

fun(data= df,x = df$x,y = df$y)
[1] 12

代码给出了预期的总和 12。将 df 数据帧的名称更改为例如“r”和“t” returns 0,即使我在函数中指定了参数。怎么了?

  df <- data.frame(r=c(1,2,3),t=c(1,2,3))

    fun <- function(data,x,y){

        z <- sum(data$x) + sum(data$y)
        return(z)
    }
    
    fun(data= df,x = df$r,y = df$t)
[1] 0

提前致谢。

我建议采用下一种方法。看起来您的代码在使用 $ 查找数据框时。相反,你可以试试这个:

#Data 1
df <- data.frame(x=c(1,2,3),y=c(1,2,3))

#Function

fun <- function(data,x,y){
  
  z <- sum(x) + sum(y)
  return(z)
}

#Apply

fun(data= df,x = df$x,y = df$y)

输出:

[1] 12

现在第二个例子:

#Apply 2

df <- data.frame(r=c(1,2,3),t=c(1,2,3))

fun(data= df,x = df$r,y = df$t)

输出:

[1] 12

问题是第二个函数试图从 data 中提取变量 xy。这相当于做 data[["x"]] 而不是你的本意。

相反,我们可以将变量作为字符传递以获得预期结果并将提取从 data$x 转换为 data[[x]]:

df <- data.frame(r=c(1,2,3),t=c(1,2,3))

fun <- function(data,x,y){
  
  z <- sum(data[[x]]) + sum(data[[y]])
  return(z)
}

fun(data= df,x = "r",y = "t")
#> [1] 12

对于这个特定的示例,我们可以使用基本方法并使用非常干净的 with()

with(df, sum(r) + sum(t))