2015-10-20 69 views
1

一個data.frame我有一個列表(當然,時間稍長):獲得混合類型列表

lst <- list(c(x=1, y=2), NULL) 

我怎麼會得到這樣的data.frame從我的名單?

data.frame(x=c(1, NaN), y=c(2,NaN)) 
    x y 
1 1 2 
2 NaN NaN 

可能有一個聰明的函數,而不是迭代循環和追加(這將是內存效率低下)。

+1

嘗試'do.call(rbind,lapply(LST,函數(x)如果(is.null(X))NA否則x))' – akrun

+0

太好了!這裏'do.call'背後的想法是什麼?你不能直接打電話嗎? – Xiphias

+0

這是一個列表,所以你需要'do.call' – akrun

回答

3

我們可以用一個if/else以取代NaN空元素,然後用rbinddo.call

do.call(rbind,lapply(lst, function(x) if(is.null(x)) NA else x)) 

或者我們基於邏輯指數(sapply(lst, is.null))改變了NULL元素NaN和使用rbind

lst[sapply(lst, is.null)] <- NaN 
    setNames(do.call(rbind.data.frame, lst), paste0('V', 1:2))