【问题标题】:Passing column names from a function to use it in lapply从函数传递列名以在 lapply 中使用它
【发布时间】:2017-05-29 18:17:50
【问题描述】:

尝试创建一个函数以从分位数回归模型中提取所需的系数,将其应用于多个变量并编译系数。这是我的功能;

library (quantreg)                        ## to perform quantile regression
taus <- c(.05,.25,.75, 0.95)
Myfun <- function(varname, data){ 
                y <- data[,varname]
                q <- summary(rq(y~x, taus),se="boot")
                z <- cbind(q[[1]]$coef[1,1], q[[2]]$coef[1,1], q[[3]]$coef[1,1], q[[4]]$coef[1,1])
}

colnames(z) = c("Q1b", "Q2b","Q3b", "Q4b")

##creating an artificial dataset 
    set.seed (1988)
    x <- rnorm(50,10,1);    error1 <- rnorm(50,0,1);  error2 <- rnorm(50,0,5)  
    data <- data.frame(cbind(y1 <- 1+(2*x)+error1, y2 <- 1+(2*x)+error2, x)) 
    Myfun <- function(varname, data){ 
                y <- data[,varname]
                q <- summary(rq(y~x, taus),se="boot")
                z <- cbind(q[[1]]$coef[1,1], q[[2]]$coef[1,1], q[[3]]$coef[1,1], q[[4]]$coef[1,1])colnames(data) <-c ("y1", "y2", "x")

## apply Myfun for the data
    listcoef <- lapply(names(data)[1:2], function(x) Myfun(x, data))

我可以从中得到我想要的结果。但是,当我添加时, colnames(data)

Myfun <- function(varname, data){ 
            y <- data[,varname]
            q <- summary(rq(y~x, taus),se="boot")
            z <- cbind(q[[1]]$coef[1,1], q[[2]]$coef[1,1], q[[3]]$coef[1,1], q[[4]]$coef[1,1])
            colnames(data) <- c("y1", "y2", "x")
}

作为 Myfun 中的最后一行,我仅从 listcoef 获得列名作为结果。请让我知道我哪里出错了?

【问题讨论】:

  • 函数rq ?
  • z 未在 MyFun 之外定义 ...
  • @cmbarbu 你好,我错过了要指定的库。 rq 是 quantreg 包中可用的函数。我只在 Myfun 中包含了 z。

标签: r lapply


【解决方案1】:

函数返回的是最后计算的内容(如果添加此行,这里是您的名称向量)。您可以在函数顶部添加这一行:

Myfun <- function(varname, data){ 
    colnames(data) <- c("y1", "y2", "x")       
    y <- data[,varname]
    q <- summary(rq(y~x, taus),se="boot")
    z <- cbind(q[[1]]$coef[1,1], q[[2]]$coef[1,1], q[[3]]$coef[1,1], q[[4]]$coef[1,1])
}

或添加return() 语句。

Myfun <- function(varname, data){ 
    y <- data[,varname]
    q <- summary(rq(y~x, taus),se="boot")
    z <- cbind(q[[1]]$coef[1,1], q[[2]]$coef[1,1], q[[3]]$coef[1,1], q[[4]]$coef[1,1])
    colnames(data) <- c("y1", "y2", "x")       
    return(z)
}

【讨论】:

  • 这行得通。这正是我所缺少和想要的。谢谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-09-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多