Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/clojure/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Clojure:如何将函数应用于哈希映射值,其中一些是向量_Clojure - Fatal编程技术网

Clojure:如何将函数应用于哈希映射值,其中一些是向量

Clojure:如何将函数应用于哈希映射值,其中一些是向量,clojure,Clojure,我正在尝试将哈希映射中的值类型(哈希映射包含从csv文件导入的数据,该文件将所有内容作为字符串导入,从而导致此问题)从字符串更改为浮点: 输入示例: (def toydata {"EGFR" ["12.34" "4.45" "1.32"], "MYCN" "5.11", "ABC9" ["3.21" "1.32"]}) 我想要的是: {"EGFR" [12.4 4.45 1.32] "MYCN" 5.11 "ABC9" [3.21 1.32]} 我在这里找到了一个很好的例子,由Thomas编

我正在尝试将哈希映射中的值类型(哈希映射包含从csv文件导入的数据,该文件将所有内容作为字符串导入,从而导致此问题)从字符串更改为浮点:

输入示例:

(def toydata {"EGFR" ["12.34" "4.45" "1.32"], "MYCN" "5.11", "ABC9" ["3.21" "1.32"]})
我想要的是:

{"EGFR" [12.4 4.45 1.32] "MYCN" 5.11 "ABC9" [3.21 1.32]}
我在这里找到了一个很好的例子,由Thomas编写,如下所示,但它似乎不适用于作为向量的贴图值:

(defn remap [m f] 
  (reduce (fn [r [k v]] (assoc r k (apply f v))) {} m))
当我尝试在地图上调用此函数时:

(remap toydata #(Float/parseFloat %))
我得到一个错误:

ClassCastException clojure.lang.PersistentVector cannot be cast to java.lang.String
有人能帮忙吗?

问题是重新映射的(应用f v)部分要求f是一个多算术函数。我会将“重新映射”更改为这样:

(defn remap [m f] 
  (reduce (fn [r [k v]] (assoc r k (f v))) {} m))
然后呢

(remap toydata (fn[x] 
  (if (coll? x) (into [] (map #(Float/parseFloat %) x)) (#(Float/parseFloat %) x))))
输出:

{"MYCN" 5.11, "ABC9" [3.21 1.32], "EGFR" [12.34 4.45 1.32]}

啊,不平等。要学的东西太多了。谢谢你,迭戈,工作得很好。