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
中提取变量 x
和 y
。这相当于做 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))
我对另一个问题有疑问,但我尝试将其分解为更简单的代码,以便可以看到我最初的问题。我尝试制作一个数据框和一个计算总和的函数,如下所示:
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
中提取变量 x
和 y
。这相当于做 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))