对不起,如果在我仔细查看之前已经询问过这个问题,但找不到任何内容。 我的问题如下。我有调查数据,并希望使用不同的变量执行相同的3个步骤。我总是希望输出按性别分开。所以我想创建一个自动执行此操作并返回三个新变量的函数。看起来应该是这样的:
myfunction <- function(x) {
x.mean.by.gender <- svyby(~x, ~gender, svymean, design = s.design)
x.boxplot <- svyboxplot(x~gender, varwith=FALSE, design = s.design)
x.ttest <- svyttest(x~gender, design = s.design)}
myfunction(data$income)
这是我想要做的一个工作示例(boxplot不按性别划分但不重要):
require("survey")
income <- runif(50, 1000, 2500)
wealth <- runif(50, 10000, 100000)
weight <- runif(50, 1.0, 1.99)
id <- seq(from = 1, to = 50, 1)
gender <- sample(0:1, 50, replace = TRUE)
data <- data.frame(income, wealth, weight, id, gender)
data.w <- svydesign(ids = ~id, data = data, weights = ~weight)
data.w <- update(data.w, count=1)
svytotal(~count, data.w)
# Income difference
income.mean.table <- svyby(~income, ~gender, svymean, design = data.w)
income.mean.table
income.boxplot <- svyboxplot(income~gender, varwith = FALSE, design = data.w)
income.ttest <- svyttest(income~gender, design = data.w)
income.ttest
# Wealth difference
wealth.mean.table <- svyby(~wealth, ~gender, svymean, design = data.w)
wealth.mean.table
wealth.boxplot <- svyboxplot(wealth~gender, varwith = FALSE, design = data.w)
wealth.ttest <- svyttest(wealth~gender, design = data.w)
wealth.ttest
因此该函数应执行svyby
,svyboxplot
和svyttest
的迭代之一,并使用用作input.function(例如){{1的变量的名称创建变量}}。我希望这可以解决问题。对不起,感到困惑。
答案 0 :(得分:0)
如果数据对象的类型不同,只需创建列表并将其返回
更新:您可以使用返回列表的命名元素的版本
fl <- function(x) {
a <- x*12.0
b <- rep(1L, 12)
c <- "qqqqq"
list(A = a, B = b, C = c)
}
q <- fl(c(1, 2, 3, 4, 5))
print(q$A)
print(q$B)
print(q$C)