定义从data.frame获取变量作为输入的函数,并在R中创建新变量

时间:2016-03-26 18:20:03

标签: r function

对不起,如果在我仔细查看之前已经询问过这个问题,但找不到任何内容。 我的问题如下。我有调查数据,并希望使用不同的变量执行相同的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

因此该函数应执行svybysvyboxplotsvyttest的迭代之一,并使用用作input.function(例如){{1的变量的名称创建变量}}。我希望这可以解决问题。对不起,感到困惑。

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)