R 将任意深度的输入转换为矢量

R 将任意深度的输入转换为矢量,r,vector,clojure,clojure-contrib,R,Vector,Clojure,Clojure Contrib,以一个函数为例,它输入一个集合、集合集合集合、嵌套向量,集合中包含集合等等。因此,输入有时不是同一类型的。如何将这些输入转换成嵌套的向量结构?在第一种情况下,我会使用 (into [] #{1 2 3 4}) 将数据转换为向量。 但对于集合中的集合,我无法输出嵌套向量,即 #{1 2 3 #{1 2 3}} 类似地,我可能有一个输入,例如 [1 2 3 (4 5 6)] 我想要输出 [1 2 3 [4 5 6]] 我的想法是,有时我需要在深度范围内选择一个集合或集合,将其转化为向量。是否

以一个函数为例,它输入一个集合、集合集合集合、嵌套向量,集合中包含集合等等。因此,输入有时不是同一类型的。如何将这些输入转换成嵌套的向量结构?在第一种情况下,我会使用

(into [] #{1 2 3 4})
将数据转换为向量。 但对于集合中的集合,我无法输出嵌套向量,即

#{1 2 3 #{1 2 3}}
类似地,我可能有一个输入,例如

[1 2 3 (4 5 6)]
我想要输出

[1 2 3 [4 5 6]]
我的想法是,有时我需要在深度范围内选择一个集合或集合,将其转化为向量。是否可能有一个函数,通常可以处理许多不同的结构输入并输出嵌套的向量结构。也就是说,一个函数能概括上述例子吗?我稍微简化了一些示例,例如,我可能有如下输入

[[[1 2 3 4] [#{1 2 3 4} 2 3 4] [(1 2 3 4) 2 3 4]]]

为了更好地理解我正在研究的函数,从语言R中考虑函数C。这个函数的重要性在于向量结构在统计/数据分析中的重要性。

一个天真的减少实现:

user=> (use 'clojure.walk)
user=> (clojure.walk/postwalk (fn [e] (if (coll? e) (vec e) e)) '(1 2 3 #{4 5 6 (7 8 9)}))
[1 2 3 [4 5 6 [7 8 9]]]
(defn to-vectors [c]
  (reduce #(conj %1 (if (coll? %2) (to-vectors %2) %2))
          [] c))

user=> (to-vectors '[[[1 2 3 4] [#{1 2 3 4} 2 3 4] [(1 2 3 4) 2 3 4]]])  
[[[1 2 3 4] [[1 2 3 4] 2 3 4] [[1 2 3 4] 2 3 4]]]

如果您用R语法写出输入和所需输出,可能会有所帮助。您可能要查找的是R中的“列表”。列表是非结构化的,允许您以任何喜欢的嵌套方式存储数据。使用'list()'函数初始化一个列表,然后使用
list_变量[[name]]存储东西。我想用Clojure编写这个函数,但前提是R中的函数C。