CRAN-R:子集数据帧错误或违反语义?

mmg*_*mgm 0 r subset

今天,由于数据帧子集操作,我遇到了代码中的错误.我想知道我发现的问题是一个错误还是我违反了R语义.

我正在使用R 2.15.2-61015(Trick或Treat)运行RHEL x86_64.我正在使用基础包中的子集操作.

以下代码应该是可重现的,并且它是在为此测试目的而启动的干净R控制台上运行的.

>teste <-data.frame(teste0=c(1,2,3),teste1=c(3,4,5))
>teste0<-1
>teste1<-1

>subset(teste,teste[,"teste0"]==1 & teste[,"teste1"]==1)
[1] teste0 teste1
<0 rows> (or 0-length row.names)

>subset(teste,teste[,"teste0"]==teste0 & teste[,"teste1"]==teste1)
teste0 teste1
1      1      3
2      2      4
3      3      5
Run Code Online (Sandbox Code Playgroud)

但是,如果我在子集操作之外运行逻辑代码:

>teste[,"teste0"]==teste0 & teste[,"teste1"]==teste1
[1] FALSE FALSE FALSE
Run Code Online (Sandbox Code Playgroud)

我希望两个子集操作都会产生一个空的数据帧.但是,第二个返回完整的数据帧.这是一个错误还是我错过了R环境和名称空间的一些内容?

谢谢你的帮助,米格尔

Mat*_*erg 5

在这个声明中:

subset(teste,teste[,"teste0"]==teste0 & teste[,"teste1"]==teste1)
Run Code Online (Sandbox Code Playgroud)

teste0意味着teste $ teste0.对于teste1也是如此.

在这个声明中:

teste[,"teste0"]==teste0 & teste[,"teste1"]==teste1
Run Code Online (Sandbox Code Playgroud)

teste0和teste1是您在上面定义的向量(不是数据框的成员).

  • @mmgm:`subset`函数创建一个本地环境,其中列名称被添加到搜索路径中,不需要引用.这被称为"非标准评估",它实际上发生了很多.即使键入`help(subset)`也是一个例子,因为"标准"调用将是`help('subset')`.使用`with`,`within`和`transform`可以看到类似的行为. (4认同)
  • @mmgm你可以先阅读一下[范围](http://cran.r-project.org/doc/manuals/r-release/R-intro.html#Scope)如何在R中工作,以及[this] (http://stackoverflow.com/a/9863081/324364)问题可能会有所帮助. (2认同)