聚合中get和mget的不同beheavior(R)
我有一个列名称的字符数组(聚合中get和mget的不同beheavior(R),r,aggregate,R,Aggregate,我有一个列名称的字符数组(chr[1:5]名为keynn),我想对其执行聚合。 数组的所有元素都是数据框的有效列名(mydata),但它是字符串而不是变量(“YEAR”而不是mydata$YEAR) 我尝试使用get()从名称返回列,它对第一个元素有效,如下所示: attach(mydata) aggregate(mydata, by=list(get(keynn, .GlobalEnv)), FUN=length) 我尝试使用mget(),因为我的数组作为多个元素,如下所示: attach(
chr[1:5]
名为keynn
),我想对其执行聚合。
数组的所有元素都是数据框的有效列名(mydata
),但它是字符串而不是变量(“YEAR”而不是mydata$YEAR
)
我尝试使用get()
从名称返回列,它对第一个元素有效,如下所示:
attach(mydata)
aggregate(mydata, by=list(get(keynn, .GlobalEnv)), FUN=length)
我尝试使用mget(),因为我的数组作为多个元素,如下所示:
attach(mydata)
aggregate(mydata, by=list(mget(keynn, .GlobalEnv)), FUN=length)
但我有一个错误:
value for 'YEAR' not found.
如何获得多个要聚合的列的等效get
谢谢大家! 我建议一般不要使用
attach
如果您只是试图从mydata
中获取列,则可以使用[
为列表编制索引
aggregate(mydata, by = mydata[keynn], FUN = length)
应该可以工作——很明显,您希望从mydata
使用attach
的问题在于,它会将mydata
添加到搜索路径(而不是复制到全局环境)
试一试
因此,如果要使用mget
和attach
,则需要
mget(keynn, .GlobalEnv, inherits = TRUE)
这样它就不会只在全球环境中搜索了
但这是不值得的(IMHO)
之所以get
有效,是因为默认情况下inherits=TRUE
。因此,如果附加了mydata
,您可以使用lappy(keynn,get)
,但这又是一个丑陋且不清楚它在做什么的问题
另一种方法是使用
data.table
,它将通过相关data.table中的参数来评估
library(data.table)
DT <- data.table(mydata)
DT[, {what you want to aggregate} , by =keynn]
库(data.table)
DTaggregate(mydata,by=mydata[keynn],FUN=length)
效果很好。谢谢。非常感谢。mget应该做什么?
library(data.table)
DT <- data.table(mydata)
DT[, {what you want to aggregate} , by =keynn]