R 访问';数据';with()函数的参数?
在R 访问';数据';with()函数的参数?,r,dataframe,R,Dataframe,在with()函数的expr表达式中,是否可以直接访问数据参数?以下是我在概念上的意思: > print(df) result qid f1 f2 f3 1 -1 1 0.0000 0.1253 0.0000 2 -1 1 0.0098 0.0000 0.0000 3 1 1 0.0000 0.0000 0.1941 4 -1 2 0.0000 0.2863 0.0948 5 1 2 0.0000
with()
函数的expr
表达式中,是否可以直接访问数据
参数?以下是我在概念上的意思:
> print(df)
result qid f1 f2 f3
1 -1 1 0.0000 0.1253 0.0000
2 -1 1 0.0098 0.0000 0.0000
3 1 1 0.0000 0.0000 0.1941
4 -1 2 0.0000 0.2863 0.0948
5 1 2 0.0000 0.0000 0.0000
6 1 2 0.0000 0.7282 0.9087
> with(df, subset(.data, select=f1:f3)) # Doesn't work
当然,上面的例子有点傻,但对于这样的事情,它会很方便:
with(subset(df, f2>0), foo(qid, vars=subset(.data, select=f1:f3)))
我试着在environment()
和parent.frame()
等方面进行研究,但没有找到任何有效的方法
也许这真的是一个关于
eval()
的问题,因为这就是with.default()
的实现方式。我倾向于将其反转,即将with()
放在外部,并让子集()
处理其数据:
R> data(mtcars)
R> with(subset(mtcars, gear==4), lm(mpg ~ wt)) # no data arg
Call:
lm(formula = mpg ~ wt)
Coefficients:
(Intercept) wt
42.49 -6.86
这也是一个愚蠢的例子,因为lm(mpg~wt,data=mtcars,subset=gear==4)
显然也是这样,但你得到了漂移。我倾向于将其反转,即将
with()
放在外部,并让子集()处理其数据:
R> data(mtcars)
R> with(subset(mtcars, gear==4), lm(mpg ~ wt)) # no data arg
Call:
lm(formula = mpg ~ wt)
Coefficients:
(Intercept) wt
42.49 -6.86
这也是一个愚蠢的例子,因为lm(mpg~wt,data=mtcars,subset=gear==4)
显然也是这样,但是你得到了答案。使用parent.frame()
:
如你所见:
parent.frame(3)
是基本环境(在本例中)
parent.frame(2)
是子集
函数的环境
parent.frame(1)
是{
功能的环境(请参见?Paren
)
使用parent.frame()
:
如你所见:
parent.frame(3)
是基本环境(在本例中)
parent.frame(2)
是子集
函数的环境
parent.frame(1)
是{
功能的环境(请参见?Paren
)
太棒了,谢谢。我不知道为什么我在拨弄parent.frame()时没有弄明白这一点,我想我没有尝试足够的级别。所以现在我可以做:。太棒了,谢谢。不知道为什么我在拨弄parent.frame()时没有弄明白这一点
,我想我没有尝试足够的级别。所以现在我可以做到:。这实际上并不能解决问题-在我最初的示例中,请注意,我调用了子集()
两次,一次按行过滤,一次按列过滤。我不能同时执行这些操作,因为我实际上需要在调用foo()时使用额外的列
这不是我在第二个subset()
中选择的列的一部分。这实际上并不能解决问题-在我最初的示例中,请注意我调用了subset()
两次,一次按行过滤,一次按列过滤。我不能同时执行这些操作,因为我实际上需要在调用foo时使用额外的列()
这不是我在第二个子集()中选择的列的一部分。
with(subset(dfrm, x1<0), {
print(ls())
print(ls(parent.frame(1)))
print(ls(parent.frame(2)))
print(ls(parent.frame(3)))
})
# [1] "g1" "x1" "x2"
# [1] "enclos" "envir" "expr"
# [1] "data" "expr"
# [1] "dfrm"