R unname()显示从vapply()返回的结果没有效果

时间:2015-11-03 15:14:15

标签: r

我正在使用unname加上一些其他内置函数来获取字符串中的前两位数字,表示时间如下:

v = vapply(vec, function(x) {
  as.numeric(unname(strsplit(x, ":")[[1]][1]))
}, 1)

问题是,现在这会返回命名输出:

19:22 13:30 13:30 17:00 19:20 17:00 14:15 17:00 13:30 19:15 
   19    13    13    17    19    17    14    17    13    19 

我使用的是大型data.table,所以我想要提高效率,即不必两次运行unname为什么unname上面没有任何效果? 这是我到目前为止所做的尝试:

  • unnameas.numeric
  • 的交换顺序

以下是vec的样子:

> vec
 [1] "19:22" "13:30" "13:30" "17:00" "19:20" "17:00" "14:15" "17:00" "13:30" "19:15"

2 个答案:

答案 0 :(得分:0)

您可以使用sapply

vec<-c("19:22", "13:30" ,"13:30" ,"17:00", "19:20", "17:00" ,"14:15", "17:00", "13:30" ,"19:15")
as.numeric(sapply(vec,function(x){strsplit(x,':')[[1]][1]}))

[1] 19 13 13 17 19 17 14 17 13 19

答案 1 :(得分:0)

我的猜测是/meteor/locals/正在发挥作用,但是unname本身会得到最终的说法&#34;可以这么说,因为它的vapply默认为USE.NAMES,所以你得到了名字。例如,

TRUE

所以你真的不需要使用R> (v <- vapply(vec, function(x) { as.numeric(unname(strsplit(x, ":")[[1]][1])) }, 1, USE.NAMES = FALSE)) #[1] 19 13 13 17 19 17 14 17 13 19 ## R> (v2 <- vapply(vec, function(x) { as.numeric(strsplit(x, ":")[[1]][1]) }, 1, USE.NAMES = FALSE)) #[1] 19 13 13 17 19 17 14 17 13 19 ,正如第二个例子所展示的那样。