此问题已在此处有答案:
Subsetting data frame using variable with same name as column(3个答案)
6天前关闭。
我在R的subset函数中多次遇到以下命名空间问题,因此我想在这里寻求一个比我更优雅的解决方案:
Species <- 'setosa'
subset(iris, Species==Species)
返回整个iris
数据集,我想是因为Species==Species
的计算结果为true。
我的解决办法是
subset(iris, Species==get('Species', envir = .GlobalEnv)
但是当变量Species
仅在函数的范围内定义时,这将不起作用。
当然,也可以使用不同的变量名,如species
(小写)作为全局变量。然而,我认为这实际上可读性较差,作为最终用户,我实际上希望R
允许对来自不同名称空间的两个同名变量进行这种比较。
1条答案
按热度按时间axzmvihb1#
基R
subset
函数不能很好地处理变量名相同的情况。我认为这是subset
帮助页包含以下警告的原因之一这是一个用于交互式使用的便利功能。对于编程,最好使用标准的子集函数,如[,特别是参数子集的非标准评估可能会产生意想不到的后果。
这条信息基本上是建议你使用
get()
的替代方法是使用globalenv()
函数来获取全局环境如果您使用的是dplyrs
filter()
函数,则可以使用代词.env
显式表示