小编Mar*_*ars的帖子

在数据框的选定列中包含NA(缺失)值的行的子集

我们有一个CSV文件的数据框.数据框DF包含包含观察值的列和VaR2包含测量日期的列().如果未记录日期,则CSV文件包含NA缺失数据的值.

Var1  Var2 
10   2010/01/01
20   NA
30   2010/03/01
Run Code Online (Sandbox Code Playgroud)

我们希望使用subset命令来定义一个新的数据框new_DF,使其只包含具有NA'column(VaR2)值的行.在给出的示例中,只有第2行将包含在新的中DF.

命令

new_DF<-subset(DF,DF$Var2=="NA") 
Run Code Online (Sandbox Code Playgroud)

不起作用,结果数据框没有行条目.

如果在原始CSV文件NA中交换 了值NULL,则相同的命令会产生所需的结果:new_DF<-subset(DF,DF$Var2=="NULL").

如果字符串NA在原始CSV文件中提供了值,那么如何使此方法有效?

csv r subset dataframe na

87
推荐指数
6
解决办法
24万
查看次数

为什么不能在基于JVM的Lisps中优化尾调用?

主要问题:我将尾部调用优化(TCO)的最重要应用视为递归调用到循环的转换(在递归调用具有某种形式的情况下).更准确地说,当翻译成机器语言时,这通常会转换成某种跳跃系列.编译为本机代码(例如SBCL)的一些Common Lisp和Scheme编译器可以识别尾递归代码并执行此转换.基于JVM的Lisp(例如Clojure和ABCL)在执行此操作时遇到了麻烦.JVM作为一台可以防止或使其变得困难的机器是什么?我不明白.JVM显然没有循环问题.编译器必须弄清楚如何进行TCO,而不是编译它的机器.

相关问题:Clojure 可以将看似递归的代码转换成循环:如果程序员用关键字替换对函数的尾调用,它就好像它正在执行TCO一样recur.但是,如果有可能让编译器识别尾调用 - 例如SBCL和CCL那样做 - 那么为什么Clojure编译器不能确定它应该按照它处理的方式处理尾调用recur呢?

(对不起 - 这无疑是一个常见问题解答,我确信上面的评论显示了我的无知,但我找不到早期的问题是不成功的.)

lisp jvm clojure jvm-languages abcl

21
推荐指数
1
解决办法
6729
查看次数

如何在<g>组中获取对象的绝对坐标?

这可能是常见问题,所以请随时向我指出另一个答案.该主题很难搜索.

如果我想使用d3.js来获取在SVG对象中显式声明的属性,或者我已经使用D3明确地放置了该属性,我可以轻松地获取属性的值d3.select.例如,这打印300:

...
<circle id="mycircle" r="10" cx="100" cy="200">
...
d3.select("#mycircle").attr("cx", 300);
console.log(d3.select("#mycircle").attr("cx"));
Run Code Online (Sandbox Code Playgroud)

如果我没有显式设置属性的值,但它是从<g>组中隐式"设置" 怎么办?或者:我如何使用代码找出<g>组居中的位置?我想要一些方法来确定<svg>对象的绝对坐标系中的内容<g>是什么.如果我知道它在哪里<g>,它是如何在太空中定向的,我可以弄清楚里面的点是什么.我怎样才能做到这一点?

BigBadaboom在评论这个问题的答案时评论说,继承的不是一对坐标,而是一个transform属性.所以我可以选择a <g>并获取transform属性的值:

console.log(d3.select("#mygroup").attr("transform"));
Run Code Online (Sandbox Code Playgroud)

打印,例如:

"旋转(-125.93)翻译(0,-25)"

我是否必须解析它以找出<g>绝对坐标系中的位置?

svg d3.js

21
推荐指数
4
解决办法
3万
查看次数

使用包含类型提示的宏生成Clojure代码

我正在尝试使用类型提示生成一些Clojure代码,但是每当我构建一些代码时类型提示似乎都消失了(它们在代码编译时也不起作用)

例如

`(let [^BufferedImage b (create-buffered-image)] 
   (.getRGB b 0 0))

=> (clojure.core/let [user/b (user/create-buffered-image)] (.getRGB user/b 0 0))
Run Code Online (Sandbox Code Playgroud)

我不确定为什么类型提示正在消失,但我认为它与读者处理metatdata的方式有关.

在生成的代码中创建正确类型提示的正确方法是什么?

macros code-generation metaprogramming clojure type-hinting

20
推荐指数
1
解决办法
1588
查看次数

cljc文件的基本功能

通常,Clojure源文件被命名为(例如)foo.clj,而Clojurescript源文件被命名为foo.cljs.我的印象是,在Clojure的版本> = 1.7,我可以命名一个文件foo.cljc如果我希望它是可与加载requireuse无论从Clojure的和Clojurescript.

它是否正确?它似乎隐含在使用cljc读取器条件的主要文档页面中,但据我所知,它从未明确说明.

这不是关于使用reader条件来指定在Clojure和Clojurescript中运行的备用代码的问题.它更基本.例如,我有一个源文件,其中包含完全通用的代码:它将在Clojure和Clojurescript中运行不变.我可以假设通过命名为".cljc",require总是会从Clojure和Clojurescript中找到它(假设它的名字正确,位于正确的位置,等等)?

[我很确定我是对的,但我不确定,我认为如果我是正确的话,在这里记录答案是值得的.]

clojure clojurescript

13
推荐指数
2
解决办法
1530
查看次数

如何使用rand-int生成可重复的随机序列

我希望能够rand在Clojure中使用生成可重复的数字.(具体来说,我希望调用rand-nth或者Incanter的结果sample是可重复的,而这些调用rand-int反过来调用rand).

我从这个问题中发现,如果我使用clojure.data.generators,我可以重置随机状态:

(require '[clojure.data.generators :as gen])
(alter-var-root #'gen/*rnd* (constantly (java.util.Random. 437)))
(gen/reservoir-sample 5 (range 1000)) ; => [940 591 636 12 755]
(gen/reservoir-sample 5 (range 1000)) ; => [376 540 827 307 463]
; reset random state:
(alter-var-root #'gen/*rnd* (constantly (java.util.Random. 437)))
; now the same results are generated again:
(gen/reservoir-sample 5 (range 1000)) ; => [940 591 636 12 755]
(gen/reservoir-sample 5 (range 1000)) ; => [376 …
Run Code Online (Sandbox Code Playgroud)

clojure

9
推荐指数
1
解决办法
3534
查看次数

如何运行Clojure文件?

我是clojure的绝对初学者.我有clojure1.6和lein(我使用ubuntu 15.04).如何运行我使用终端创建的clojure文件?有这样clojure file.clj的命令吗?我感谢您的帮助!

ubuntu clojure leiningen

9
推荐指数
3
解决办法
2344
查看次数

子集R数组:当长度为1时,维度丢失

对子集化数组时,R的行为会有所不同,具体取决于其中一个维度的长度是否为1.如果维度的长度为1,则在子集化期间该维度将丢失:

ax <- array(1:24, c(2,3,4))
ay <- array(1:12, c(1,3,4))
dim(ax)
#[1] 2 3 4
dim(ay)
#[1] 1 3 4
dim(ax[,1:2,])
#[1] 2 2 4
dim(ay[,1:2,])
#[1] 2 4
Run Code Online (Sandbox Code Playgroud)

从我的观点来看,ax和ay是相同的,对它们执行相同的子集操作应返回具有相同尺寸的数组.我可以看到R处理这两种情况的方式可能很有用,但在我编写的代码中它是不可取的.这意味着当我将子集化数组传递给另一个函数时,如果我碰巧在较早阶段将维度缩减为长度1,则该函数将获得缺少维度的数组.(所以在这种情况下,R的灵活性使我的代码不那么灵活!)

如何在子集化期间防止R丢失长度为1的维度?还有另一种索引方式吗?有些标志要设置?

r subset

8
推荐指数
1
解决办法
1822
查看次数

如何使用幽灵从clojure树中删除一个键?

我一直在使用Clojure Spectre库(https://github.com/nathanmarz/specter)加快速度.我遇到的问题是使用transform或setval删除密钥.我可以将其设置为nil,但如何删除密钥?

clojure clojurescript specter

8
推荐指数
3
解决办法
690
查看次数

为什么var在R中表现得像cov?

很抱歉问这个...这肯定是一个FAQ,这是一个愚蠢的问题,但它一直在困扰我.假设我想获得数据帧中每个数字列的方差,例如

df <- data.frame(x=1:5,y=seq(1,50,10))
Run Code Online (Sandbox Code Playgroud)

当然,我试试

var(df)
Run Code Online (Sandbox Code Playgroud)

而不是给我我希望的东西,这将是类似的东西

  x    y
2.5  250
Run Code Online (Sandbox Code Playgroud)

我明白了

     x   y
x  2.5  25
y 25.0 250
Run Code Online (Sandbox Code Playgroud)

它具有对角线的变化,以及其他位置的协方差.当我查找help(var)并读取"var只是cov的另一个接口"时,这是有意义的.当然,方差是变量与其自身之间的协方差.输出是稍显混乱,但我可以沿对角线阅读,或者使用只产生变化diag(var(df)),sapply(df, var)lapply(df, var),或致电var上反复df$xdf$y.

但为什么?方差是一种常规的,基本的描述性统计,仅次于均值.将它应用于数据帧的列不应该完全和完全无关紧要吗?当我只询问差异时,为什么要给我协方差?只是好奇.感谢您对此提出任何意见.

r

7
推荐指数
2
解决办法
1651
查看次数