从 R 中的 GoogleSheets 清除列表列表

Man*_*anu 3 r

我从谷歌工作表中检索了一张工作表,并返回了一个列表列表:

sheet <- list(var1 = list(Sys.time(), Sys.time(),NULL),
             var2 = list(NULL,1,2),
             var3 = list("a",NULL,"b"))
Run Code Online (Sandbox Code Playgroud)

我必须将列表中的所有成员转换NULL为NAs. 我被善意地解释了如何使用例如列表来完成它sheet$var1[sapply(sheet$var1,is.null)] <- NA,但是由于我有很多变量,是否可以仅在一行中对其进行编码?任何帮助将不胜感激。

akr*_*run 6

它是一个嵌套列表。所以我们可以做

library(purrr)
map(sheet, ~ map(.x, ~ replace(.x, is.null(.x), NA)))
Run Code Online (Sandbox Code Playgroud)

或与 base R

lapply(sheet, function(x) lapply(x, function(y) replace(y, is.null(y), NA)))
#$var1
#$var1[[1]]
#[1] "2020-09-13 16:44:56 CDT"

#$var1[[2]]
#[1] "2020-09-13 16:44:56 CDT"

#$var1[[3]]
#[1] NA


#$var2
#$var2[[1]]
#[1] NA

#$var2[[2]]
#[1] 1

#$var2[[3]]
#[1] 2


#$var3
#$var3[[1]]
#[1] "a"

#$var3[[2]]
#[1] NA

#$var3[[3]]
#[1] "b"
Run Code Online (Sandbox Code Playgroud)

或者以递归方式执行此操作 rrapply

library(rrapply)
rrapply(sheet, f = function(x) replace(x, is.null(x), NA), how = "list")
Run Code Online (Sandbox Code Playgroud)

  • 阅读一个让我进行更多调查的答案真是太棒了,现在这个函数“rapply”和“rrapply”(递归应用)已经在我的学习列表中了。感谢您抽出时间@akrun。 (2认同)