R:collect在使用向量变量选择列时发出警告

时间:2017-12-02 18:36:11

标签: r tidyr

我在R中使用gather命令来折叠数据框,它给出了一个我不清楚的警告。该命令执行它应该做的事情,但我想了解警告的原因。这是一个新警告,可能与最近更新R安装和软件包有关。

我用虹膜数据在一个简单的例子中重新创建了这个问题,见下文,它没有使用列号2,3的警告,但如果我使用我创建的矢量作为tt,则会发出警告:

> head(gather(iris,key=test,value=nn,2,3),2)
    Sepal.Length Petal.Width   Species         test  nn
299          6.2         2.3 virginica Petal.Length 5.4
300          5.9         1.8 virginica Petal.Length 5.1
> tt<- c(2,3)
> head(gather(iris,key=test,value=nn,tt),2)
    Sepal.Length Petal.Width   Species         test  nn
299          6.2         2.3 virginica Petal.Length 5.4
300          5.9         1.8 virginica Petal.Length 5.1
Warning message:
In if (!is.finite(x)) return(FALSE) :
  the condition has length > 1 and only the first element will be used

谢谢,Claudiu

1 个答案:

答案 0 :(得分:0)

最好让names代替位置,因为删除或添加列时位置可能会发生变化。由于'tt'是一个数字索引,我们可以使用它来对列名称进行子集化

library(dplyr)
library(tidyr)
library(quantmod)
last(gather(iris,key=test,value=nn, names(iris)[tt]),2)
#    Sepal.Length Petal.Width   Species         test  nn
#299          6.2         2.3 virginica Petal.Length 5.4
#300          5.9         1.8 virginica Petal.Length 5.1