В качестве примера кто-то просто разместил какой-то консольный вывод. (Это происходит очень часто, и у меня есть стратегии для преобразования вывода print для векторов и dataframes.) Мне интересно, есть ли у кого-нибудь элегантный метод для разбора этого в реальном списке R?
test <- "[[1]]
[1] 1.0000 1.9643 4.5957
[[2]]
[1] 1.0000 2.2753 3.8589
[[3]]
[1] 1.0000 2.9781 4.5651
[[4]]
[1] 1.0000 2.9320 3.5519
[[5]]
[1] 1.0000 3.5772 2.8560
[[6]]
[1] 1.0000 4.0150 3.1937
[[7]]
[1] 1.0000 3.3814 3.4291"
Это пример с именованными и неименованными узлами:
L <-
structure(list(a = structure(list(d = 1:2, j = 5:6, o = structure(list(
w = 2, 4), .Names = c("w", ""))), .Names = c("d", "j", "o"
)), b = "c", c = 3:4), .Names = c("a", "b", "c"))
> L
$a
$a$d
[1] 1 2
$a$j
[1] 5 6
$a$o
$a$o$w
[1] 2
$a$o[[2]]
[1] 4
$b
[1] "c"
$c
[1] 3 4
Я проработал код того, как str
обрабатывает списки, но он делает по существу обратное преобразование. Я полагаю, что это должно быть структурировано несколько в этом направлении, где будет рекурсивный вызов чему-то вроде этой логики, поскольку списки могут быть названы (в которых будет "$", предшествующий последнему индексу) или неназванным (в этом случае там будет число, заключенное в "[[.]]".
parseTxt <- function(Lobj) {
#setup logic
# Untested code... basically a structure to be filled in
rdLn <- function(Ln) {
for( ln in length(inp) ) {
m <- gregexpr("\\[\\[|\\$", "$a$o[[2]]")
separators <- regmatches("$a$o[[2]]", m)
curr.nm=NA
if ( tail( separators, 1 ) == "$" ){
nm <- sub("^.+\\$","",ln)
if( !nm %in% curr.nm){ curr.nm <-c(nm, curr.nm) }
} else { if (tail( separators, 1 ) == '[[' ){
# here need to handle "[[n]]" case
} else { and here handle the "[n]" case
}
}
}