【发布时间】:2015-05-13 15:02:17
【问题描述】:
对不起,一个非常基本的问题,解决方案一定很简单,但我找不到。
尝试使用 gsub 在 data.table 中添加新列时,我收到了警告 “参数 'replacement' 的长度 > 1,并且只会使用第一个元素”,并且所有 data.table 行在新列中都有第一行的值。
这里是一个简化的例子:
dt <- data.table(v1=c(1,2,3) , v2=c("axb","cxxd","exfxgx"))
dt[ , v3:=gsub("x",v1,v2)]
新列 v3 在所有行中都包含一个带有“1”而不是“x”的字符串。
使用其他功能,例如
dt[ , v3:=paste(v1,v2)]
按预期工作。
我正在使用 Rstudio v.0.98.1103、R v.3.1.2、data.table v.1.9.4
【问题讨论】:
-
gsub在替换中没有矢量化,所以这就是警告告诉你的。 -
另一个选项是
myFunc <- function(x, y) gsub("x", x, y) ; dt[ , v3 := mapply(myFunc, v1, v2)]。另外,在我的编辑中,当您使用:=运算符时,它正在更新数据,因此无需使用dt <- dt再次重新分配它。请查看here 了解更多信息。 -
@DavidArenburg :感谢您的评论,即使更新到位,我也习惯于重新分配数据表,因为我发现在执行过程中,在控制台中看到所有头/更新数据表的尾部(更难发现错误/警告)。也许有更聪明的方法来避免它......
标签: r data.table