我正在编写一个对数据帧进行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()函数的页面,并且不会让我更进一步。感谢您的帮助,谢谢。
答案 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”这一事实似乎没有问题。