我正在创建一个在数据帧的各个列上进行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)
我做错了什么?
答案 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" ...