我有一個未知列表作爲data.table
中的列。在該列下面的情況下,是z
,它是一個字符列或將是。然而,列表中的前兩個元素是邏輯上的NA
。當我嘗試unlist
的z
專欄中,我得到以下錯誤:data.table:NA模糊未列表類型
Error in `[.data.table`(dat, , .(z = unlist(z)), by = x) :
Column 1 of result for group 2 is type 'logical' but expecting type 'character'. Column types must be consistent for each group
這是因爲我在混合邏輯(NA
S和character
)。我可以強制如下:dat[, .(y = as.character(unlist(y))), by='x']
但問題是z
是未知的。我怎樣才能讓NA
的存在不會以一般化的方式拋出錯誤?
library(data.table)
dat <- data.frame(
x = 1:3,
stringsAsFactors = FALSE
)
dat[['y']] <- list(1:3, 5:6, 18:19)
dat[['z']] <- list(LETTERS[3:6], NA, LETTERS[13:16])
setDT(dat)
dat[, .(z = unlist(z)), by = x]
我想我們可以使用'NA_character_',它應該可以正常工作。即'dat [['z']] < - 列表(LETTERS [3:6],NA_character_,LETTERS [13:16])' – akrun
@akrun,但這必須是可推廣的。它在一個不知道傳遞的類型的函數中。 –
是否可以在'list'中檢查類型,然後相應地更改'NA'?否則,將所有'NA'轉換爲字符,然後將其更改爲真實NA。 – akrun