簡體   English   中英

從函數傳遞列名以在lapply中使用它

[英]Passing column names from a function to use it in lapply

嘗試創建一種從分位數回歸模型中提取所需系數的函數,將其應用於多個變量並編譯系數。 這是我的職能;

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)<-c(“ y1”,“ y2”,“ 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")
}

作為Myfun的最后一行,我僅從listcoef獲得列名作為結果。 請讓我知道我要去哪里錯了?

函數返回的是最后計算的(如果添加此行,則為您的名稱向量)。 您可以在函數頂部添加以下行:

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)
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM