如何解决R函数使用的参数是否固定?
我对另一个问题有疑问,但我尝试将其分解为更简单的代码,以便可以看到我的最初问题。我尝试制作一个数据框和一个计算总和的函数,如下所示:
df <- data.frame(x=c(1,2,3),y=c(1,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” 即使我在函数中指定参数也返回0。怎么了?
df <- data.frame(r=c(1,t=c(1,3))
fun <- function(data,y){
z <- sum(data$x) + sum(data$y)
return(z)
}
fun(data= df,x = df$r,y = df$t)
[1] 0
谢谢。
解决方法
问题是第二个函数试图从x
中提取变量y
和data
。这等效于执行data[["x"]]
,这不是您的意图。
相反,我们可以将变量作为字符传递,以获得预期的结果并将提取的内容从data$x
转换为data[[x]]
:
df <- data.frame(r=c(1,2,3),t=c(1,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))
,
我建议采用下一种方法。使用$
查找数据帧时,您的代码看起来像。相反,您可以尝试以下方法:
#Data 1
df <- data.frame(x=c(1,y=c(1,3))
#Function
fun <- function(data,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,3))
fun(data= df,x = df$r,y = df$t)
输出:
[1] 12
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。