首先,不要设置对象名称“列表”。这可能会导致与list 发生冲突。
试试这个:
set.seed(123)
data <- data.frame(Revenue = rnorm(100, mean=1000, sd=100), dummy1 = sample(c(0,1), 100, replace = TRUE), dummy2 = sample(c(0,1), 100, replace = TRUE), dummy3 = sample(c(0,1), 100, replace = TRUE))
l <- list(data$dummy1, data$dummy2, data$dummy3)
names(l) <- names(data[,2:ncol(data)])
out <- as.data.frame(t(sapply(l, FUN = function(x) wilcox.test(data$Revenue ~ x)$p.value, USE.NAMES = TRUE)))
rownames(out) <- "Revenue"
# The output
dummy1 dummy2 dummy3
Revenue 0.975232 0.689687 0.1830813
如果你想要多个变量:
set.seed(123)
data <- data.frame(Profits = rnorm(100, mean=1000, sd=100), Revenue = rnorm(100, mean=1000, sd=100), dummy1 = sample(c(0,1), 100, replace = TRUE),
dummy2 = sample(c(0,1), 100, replace = TRUE), dummy3 = sample(c(0,1), 100, replace = TRUE))
l <- list(data$dummy1, data$dummy2, data$dummy3)
#Vector of variables of interest
vec <- c("Revenue", "Profits")
names(l) <- names(data)[!names(data) %in% vec]
out <- t(sapply(vec, FUN = function(y) sapply(l, FUN = function(x) wilcox.test(data[,c(y)] ~ x)$p.value, simplify=F)))
out
dummy1 dummy2 dummy3
Revenue 0.8491605 0.3425132 0.1765484
Profits 0.1830813 0.1951 0.5036012