为什么t.test在R中的这个函数中不起作用?

时间:2015-07-25 23:53:41

标签: r

我正在创建一个在数据帧的各个列上进行t.test的函数。以下是R:

中橙色数据集的示例
> t.test(Orange[Orange$Tree=="1",]$age, 
+        Orange[Orange$Tree=="2",]$age)

    Welch Two Sample t-test

data:  Orange[Orange$Tree == "1", ]$age and Orange[Orange$Tree == "2", ]$age
t = 0, df = 12, p-value = 1
alternative hypothesis: true difference in means is not equal to 0
95 percent confidence interval:
 -609.832  609.832
sample estimates:
mean of x mean of y 
 922.1429  922.1429 

但是当在以下函数中完成时,它不起作用:

my.t.test <- function(var, df){
  df <- na.omit(df)
  tt1 <- t.test(df[df$Tree=="1",]$var, 
                df[df$Tree=="2",]$var)
  tt1
}

> my.t.test(age, Orange)
Error in var(x) : 'x' is NULL
In addition: Warning messages:
1: In is.na(x) : is.na() applied to non-(list or vector) of type 'NULL'
2: In mean.default(x) : argument is not numeric or logical: returning NA
Called from: var(x)

我做错了什么?

1 个答案:

答案 0 :(得分:3)

使用其中一个函数[[[来使用变量名称进行子集化,即

my.t.test <- function(var, df){
  df <- na.omit(df)
  tt1 <- t.test(df[df$Tree=="1",var], 
                df[df$Tree=="2",var])
  tt1
}

my.t.test("age", Orange)

您可以阅读有关此here的信息,向下滚动到$上的部分。您的代码中的问题只是它尝试将Orange设为Orange[["var"]],而var则不存在。

由于与$部分匹配,如果您向Orange添加了一个名为“variable”的列,$var将与该列匹配(但请注意,无论您认为哪个参数都无关紧要传递给var

的函数
## Add column
Orange$variable <- "testing123"

## Test function
tst <- function(var, df) df$var

tst("somethingElse", Orange)
# [1] "testing123" "testing123" "testing123" "testing123" "testing123" ...