簡體   English   中英

lapply返回閉包列表而不是data.frames列表

[英]lapply returns list of closures instead of list of data.frames

我需要將自定義函數應用於多個.txt文件,將其應用於單個.txt文件時,其輸出如下所示:

abs_fun("50609.txt")
TIME      SECCODE    min(abs)
1  100000000 SU24018RMFS2 0.001374406
2  100000000 SU25081RMFS9 0.005432396
3  100000000 SU25082RMFS7 0.008767195
4  100000000 SU26203RMFS8 0.003786367
5  100000000 SU26205RMFS3 0.015636145
6  100000000 SU26206RMFS1 0.002658508
7  100000000 SU26207RMFS9 0.005674432
8  100000000 SU26208RMFS7 0.007532075
9  100000000 SU26212RMFS9 0.005923634
10 100000000 SU26215RMFS2 0.019073299
11 100000000 SU29006RMFS2 0.002031761
12 100000000 SU46020RMFS2 0.025543226

當我如下使用lapply

filelist <- list.files(pattern = "*.txt")
datalist2 <- lapply(filelist, function(x)abs_fun)

我得到的是閉包列表,而不是data.frames(這是我的自定義函數的外觀):

[[1]]
function (x) 
{
    data <- read.table(x, header = T, sep = ",")
    buy <- subset(data, select = c("PRICE", "TIME", "ACTION", 
        "BUYSELL", "SECCODE", "VOLUME")) %>% filter(ACTION == 
        1, BUYSELL == "B")
    buy$ACTION = NULL
    buy$BUYSELL = NULL
    sell <- subset(data, select = c("PRICE", "TIME", "ACTION", 
        "BUYSELL", "SECCODE", "VOLUME")) %>% filter(ACTION == 
        1, BUYSELL == "S")
    sell$ACTION = NULL
    sell$BUYSELL = NULL
    buysell <- inner_join(x = buy, y = sell, by = c("SECCODE", 
        "TIME"), all = TRUE)
    buysell$diff <- buysell$PRICE.y - buysell$PRICE.x
    head(buysell, n = 100)
    buysell <- group_by_at(buysell, vars(TIME, SECCODE))
    summarise(buysell, min(diff))
    buysell$abs <- (buysell$PRICE.y - buysell$PRICE.x)/(buysell$PRICE.y + 
        buysell$PRICE.x)/2
    abs <- as.data.frame(summarise(buysell, min(abs)))
    return(abs)
}

[[2]]
...

如何獲得作為結果的data.frames列表(如示例中的"50609.txt" )或從閉包中提取函數的輸出?

問題在於該函數未應用於list的元素。 在這里,我們有匿名函數( function(x) x

lapply(filelist, function(x)abs_fun(x))

或者可以直接應用而無需匿名調用

lapply(filelist, abs_fun)

OP的問題可以用

lapply(mtcars, function(x) mean)

相反,它應該是

lapply(mtcars, function(x) mean(x))

暫無
暫無

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

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