如何否定子集化参数

时间:2017-01-23 20:39:32

标签: r null arguments subset t-test

我正在编写一个对数据帧进行t检验的函数,根据我定义的参数对数据进行子集化。以下是使用mtcars数据的工作示例:

testfunc <- function(dfrm, varq, factor, gear = FALSE,
                     am = FALSE, carb = FALSE){
  # Subset the data according to the arguments:
  subsetdfrm <- dfrm[which((dfrm[,"gear"] %in% gear) & 
                             (dfrm[,"am"] %in% am) & 
                             (dfrm[,"carb"] %in% carb)),]

  # Grab the groups to be compared according to arguments:
  factorbinary <- get(factor)

  # The t-test:
  t <- t.test(dfrm[which(dfrm[factor]==factorbinary[1]), varq], 
              dfrm[which(dfrm[factor]==factorbinary[2]), varq],
              data = subsetdfrm)
  print(t)
}

这里有一个功能,比较三个齿轮的汽车与四个齿轮的汽车比较,看着有2到4个化油器的自动(am = 0)汽车:

testfunc(mtcars, "mpg", "gear", gear = c(3,4), am = 0, carb = c(2:4))

请注意,我将参数的默认值定义为“FALSE”。我想要的是找到这些自动否定子集的参数的默认值,这意味着包含所有值。 我自己的最佳解决方案是在函数开头为每个参数添加if()子句:

if(carb == FALSE){gear <- unique(dfrm$gear)}
if(am == FALSE){am <- unique(dfrm$am)}
if(carb == FALSE){carb <- unique(dfrm$carb)}

一旦参数数量增加,这将变得难以管理。 是否有一个默认值我可以设置我的参数,这将否定子集?

我想象一些与NULL对象相反的东西:“not-NULL”,或者简单地等于所有东西的通配符对象。如果没有,我可以修改我的代码以在子集步骤中使用NULL对象吗?

使用关键字“all”,“any”和“subset”进行搜索通常会链接到引用all()和any()函数的页面,并且不会让我更进一步。感谢您的帮助,谢谢。

1 个答案:

答案 0 :(得分:0)

弗兰克在评论中的贡献,这是一个有效的解决方案:

<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<img class="take-this" alt="One"/>
<img class="take-this" alt="Two"/>
<img class="not-this" alt="Three"/>
<img class="not-this" alt="Four"/>
<img class="take-this" alt="five"/>
<br/>
<select name="select">
</select>

在我的原始代码中,我有一个文件路径,而不是testfunc <- function(dfrm, varq, factor, gear = unique(dfrm$gear), am = unique(dfrm$am), carb = unique(dfrm$carb)){ # Subset the data according to the arguments: subsetdfrm <- dfrm[which((dfrm[,"gear"] %in% gear) & (dfrm[,"am"] %in% am) & (dfrm[,"carb"] %in% carb)),] # Grab the groups to be compared according to arguments: factorbinary <- get(factor) # The t-test: t <- t.test(dfrm[which(dfrm[factor]==factorbinary[1]), varq], dfrm[which(dfrm[factor]==factorbinary[2]), varq], data = subsetdfrm) print(t) } ,而dfrm导致dfrm导入的文件路径。该函数在处理参数中引用的“dfrm”这一事实似乎没有问题。