2

我正在尝试使用固定变量和在函数中创建的一些变量的混合来对函数中的数据框进行子集化(我只知道变量名称,但不能事先对它们进行矢量化)。这是一个简化的示例:

a<-c(1,2,3,4)
b<-c(2,2,3,5)
c<-c(1,1,2,2)
D<-data.frame(a,b,c)

subbing<-function(Data,GroupVar,condition){
  g=Data$c+3
  h=Data$c+1
  NewD<-data.frame(a,b,g,h)
  subset(NewD,select=c(a,b,GroupVar),GroupVar%in%condition)
}

请记住,在我的应用程序中,我无法在函数之外计算 g 和 h。有时我想根据 h 的值(如上)进行选择,有时我想使用 g。也有可能我想同时使用两者,但即使只是能够使用 1 进行子集化也会很棒。

subbing(D,GroupVar=h,condition=5)

这将返回一个错误,指出找不到对象 h。我尝试使用 as.formula 和各种方法修改子集,但每次都失败了。

除了函数的易用性之外,还有一个我想使用子集的原因。

在我实际工作的函数中,我使用了两次子集。第一次是简单的子集函数。下面刚刚指出,另一个博客探讨了如何最好地使用好的旧数据[colnames()=="g",]。谢谢你的建议,我去试试。

然而还有另一个问题。我还在函数中使用了子集(或更确切地说是变体),因为我正在处理几个复杂的设计调查(请参阅包调查),因此子集.survey.design 允许您获得子组的正确方差估计。如果我使用 [] 选择我的组,我的参数会出现错误的 se,所以我想这是一个非常重要的问题。

谢谢

4

1 回答 1

4

当函数一开始就试图定义它时,它就发生GroupVar了。R 正在自己寻找对象h(不在数据框中)。

最好的办法是引用subset函数中引号中的列名。但是,当然,那么您必须回避条件部分:

subbing <- function(Data, GroupVar, condition) {
   ....
   DF <- subset(Data, select=c("a","b", GroupVar))
   DF <- DF[DF[,3] %in% condition,]
}

这样就可以解决问题,尽管将一个数据框索引在另一个数据框内可能会很烦人。

于 2012-10-30T19:01:22.637 回答