主要曝光变量为aff
。我希望得到aff
的列联表和varlist
中的所有变量。然后我想用这些列联表进行卡方检验。我的代码如下:
name=names(data)
varlist=name[11:40]
models=lapply(varlist, function(x) {
chisq.test(table(substitute(data$i,list(i = as.name(x))),data$aff))
})
lapply(models, summary)
但我收到了错误
Error in unique.default(x, nmax = nmax) :
unique() applies only to vectors
如何解决这个问题?
答案 0 :(得分:1)
我认为你使用mtcars
等过于复杂化了。如果没有您的数据,我会尝试cyl
,使用data <- mtcars
name <- names(data)
ev <- "cyl"
varlist <- name[ name != ev ]
models <- lapply(varlist, function(nm) {
chisq.test(table(data[[nm]], data[[ev]]))
})
# Warning messages:
# 1: In chisq.test(table(data[[nm]], data[[ev]])) :
# Chi-squared approximation may be incorrect
作为曝光变量。
mtcars
(因为我在测试中使用了一个不好的例子,这里有很多警告;使用summaries <- lapply(models, summary)
str(summaries[1:2])
# List of 2
# $ : 'summaryDefault' chr [1:9, 1:3] " 1" " 1" " 1" " 1" ...
# ..- attr(*, "dimnames")=List of 2
# .. ..$ : chr [1:9] "statistic" "parameter" "p.value" "method" ...
# .. ..$ : chr [1:3] "Length" "Class" "Mode"
# $ : 'summaryDefault' chr [1:9, 1:3] " 1" " 1" " 1" " 1" ...
# ..- attr(*, "dimnames")=List of 2
# .. ..$ : chr [1:9] "statistic" "parameter" "p.value" "method" ...
# .. ..$ : chr [1:3] "Length" "Class" "Mode"
时可以忽略它,因为它对于这个测试来说真的不是一个好的数据集。)
else:
答案 1 :(得分:0)
假设您的数据类似于mtcars
,其中vs
,am
,gear
和carb
是分类变量,您可以创建一个类似的函数:
df_list_f <- function(x) chisq.test(table(df2$cyl, x))
df2 <- mtcars[,8:11] # df2 contains the columns vs, am, gear and carb
lapply(df2, df_list_f)