创建具有引用不同数据集灵活性的R函数

创建具有引用不同数据集灵活性的R函数,r,function,naming,R,Function,Naming,我试图在R中创建一个简单的函数,它可以引用多个数据集和多个变量名。使用以下代码,我得到一个错误,我认为这是由于引用: set.seed(123) dat1 <- data.frame(x = sample(10), y = sample(10), z = sample(10)) dat2 <- data.frame(x = sample(10), y = sample(10), z = sample(10)) table(dat1$x, dat1$y) table(dat2$x,

我试图在R中创建一个简单的函数,它可以引用多个数据集和多个变量名。使用以下代码,我得到一个错误,我认为这是由于引用:

set.seed(123)
dat1 <- data.frame(x = sample(10), y = sample(10), z = sample(10))
dat2 <- data.frame(x = sample(10), y = sample(10), z = sample(10))

table(dat1$x, dat1$y)
table(dat2$x, dat2$y)

fun <- function(dat, sig, range){print(table(dat$sig, dat$range))}

fun(dat = dat1, sig = x, range =  y)
fun(dat = dat2, sig = x, range =  y)
set.seed(123)

dat1数据帧上的
[[]]
运算符类似于
$
,但允许您引入对象并查找其值。然后在函数外部将“
x
”值指定给
sig
。如果不在那里加引号,R将查找
x
对象

fun <- function(dat, sig, range){print(table(dat[[sig]], dat[[range]]))}

fun(dat = dat1, sig = "x", range =  "y")
fun(dat = dat2, sig = "x", range =  "y")

fun数据帧上的
[[]]
运算符类似于
$
,但允许您引入对象并查找其值。然后在函数外部将“
x
”值指定给
sig
。如果不在那里加引号,R将查找
x
对象

fun <- function(dat, sig, range){print(table(dat[[sig]], dat[[range]]))}

fun(dat = dat1, sig = "x", range =  "y")
fun(dat = dat2, sig = "x", range =  "y")

fun数据帧上的
[[]]
运算符类似于
$
,但允许您引入对象并查找其值。然后在函数外部将“
x
”值指定给
sig
。如果不在那里加引号,R将查找
x
对象

fun <- function(dat, sig, range){print(table(dat[[sig]], dat[[range]]))}

fun(dat = dat1, sig = "x", range =  "y")
fun(dat = dat2, sig = "x", range =  "y")

fun数据帧上的
[[]]
运算符类似于
$
,但允许您引入对象并查找其值。然后在函数外部将“
x
”值指定给
sig
。如果不在那里加引号,R将查找
x
对象

fun <- function(dat, sig, range){print(table(dat[[sig]], dat[[range]]))}

fun(dat = dat1, sig = "x", range =  "y")
fun(dat = dat2, sig = "x", range =  "y")


数据帧上的
fun[[]]运算符类似于$,但允许您引入对象并查找其值。然后在函数外部,将“x”值指定给sig。如果你不把cuotes放在那里,R将查找x object,你的评论可能会进入答案本身。评论不一定会留下/不会被删除,因此任何对谈话重要的内容都应该在问答中。由于R的范围界定决策不太好,@AndriyTkach的评论很好。只是为了说明这一点<代码>r=1:10;f=函数(x,r){x[r]}
f(10:1)与f(10:1,10:1)
我无法理解@Vlo的担忧。在第一个实例中,
r
位于函数外部,在第二个实例中,r的参数不同,结果也不同。困难在哪里?我承认我很困惑,首先做
rm(r)
,然后重复
f(10:1)
,并不是抛出错误。@Bonded我必须考虑的是
r
是函数的一个参数,所以当它在那里查找
r
并且找不到它时,至少应该发出警告。我也不明白为什么
f
在没有第二个参数的情况下工作;我怀疑这是边缘案件。看起来整个问题与此问答非常相切,在任何情况下,数据帧上的。[[]]运算符类似于$,但允许您引入一个对象并查找其值。然后在函数外部,将“x”值指定给sig。如果你不把cuotes放在那里,R将查找x object,你的评论可能会进入答案本身。评论不一定会留下/不会被删除,因此任何对谈话重要的内容都应该在问答中。由于R的范围界定决策不太好,@AndriyTkach的评论很好。只是为了说明这一点<代码>r=1:10;f=函数(x,r){x[r]}
f(10:1)与f(10:1,10:1)
我无法理解@Vlo的担忧。在第一个实例中,
r
位于函数外部,在第二个实例中,r的参数不同,结果也不同。困难在哪里?我承认我很困惑,首先做
rm(r)
,然后重复
f(10:1)
,并不是抛出错误。@Bonded我必须考虑的是
r
是函数的一个参数,所以当它在那里查找
r
并且找不到它时,至少应该发出警告。我也不明白为什么
f
在没有第二个参数的情况下工作;我怀疑这是边缘案件。看起来整个问题与此问答非常相切,在任何情况下,数据帧上的。[[]]运算符类似于$,但允许您引入一个对象并查找其值。然后在函数外部,将“x”值指定给sig。如果你不把cuotes放在那里,R将查找x object,你的评论可能会进入答案本身。评论不一定会留下/不会被删除,因此任何对谈话重要的内容都应该在问答中。由于R的范围界定决策不太好,@AndriyTkach的评论很好。只是为了说明这一点<代码>r=1:10;f=函数(x,r){x[r]}
f(10:1)与f(10:1,10:1)
我无法理解@Vlo的担忧。在第一个实例中,
r
位于函数外部,在第二个实例中,r的参数不同,结果也不同。困难在哪里?我承认我很困惑,首先做
rm(r)
,然后重复
f(10:1)
,并不是抛出错误。@Bonded我必须考虑的是
r
是函数的一个参数,所以当它在那里查找
r
并且找不到它时,至少应该发出警告。我也不明白为什么
f
在没有第二个参数的情况下工作;我怀疑这是边缘案件。看起来整个问题与此问答非常相切,在任何情况下,数据帧上的。[[]]运算符类似于$,但允许您引入一个对象并查找其值。然后在函数外部,将“x”值指定给sig。如果你不把cuotes放在那里,R将查找x object,你的评论可能会进入答案本身。评论不一定会留下/不会被删除,因此任何对谈话重要的内容都应该在问答中。由于R的范围界定决策不太好,@AndriyTkach的评论很好。只是为了说明这一点<代码>r=1:10;f=函数(x,r){x[r]}
f(10:1)与f(10:1,10:1)
I无法理解