我有一个函数返回一个包含单个字符向量的列表,我想将其转换为数字。大多数情况下,列表中的所有元素都可以轻松地强制转换为数字:
所以一个简单的lapply(x, FUN = as.numeric)
工作正常。
e.g。
l <- list(a = c("1","1"), b = c("2","2"))
l
$a
[1] "1" "1"
$b
[1] "2" "2"
lapply(l, FUN = as.numeric)
$a
[1] 1 1
$b
[1] 2 2
但是,在某些情况下,矢量包含真实字符:
e.g。
l <- list(a = c("1","1"), b = c("a","b"))
l
$a
[1] "1" "1"
$b
[1] "a" "b"
lapply(l, FUN = as.numeric)
$a
[1] 1 1
$b
[1] NA NA
我带来的解决方案有效,但感觉有点复杂:
l.id <- unlist(lapply(l, FUN = function(x){all(!is.na(suppressWarnings(as.numeric(x))))}))
l.id
a b
TRUE FALSE
l[l.id] <- lapply(l[l.id], FUN = as.numeric)
l
$a
[1] 1 1
$b
[1] "a" "b"
所以我只是想知道是否有人有更简洁和优雅的解决方案来建议。
谢谢!
答案 0 :(得分:7)
一种选择是检查向量中的所有元素是否只有数字,如果是,则转换为$(document).ready(function() {
var wrapper = $(".lines");
var add_button = $("#new_line");
$(add_button).click(function() {
$(wrapper).append('<li><a href="#" class="dropdown-toggle">Popup</a> <ul class="dropdown-menu" style="background: #000; padding: 10px; display:none;">ddd</ul></li>');
$('.dropdown-toggle:last').click(function() {
$('.dropdown-menu').not($(this).next('.dropdown-menu')).hide();
$(this).next('.dropdown-menu').toggle();
});
});
});
或者保持不变。
numeric
或者,我们可以使用lapply(l, function(x) if(all(grepl('^[0-9.]+$', x))) as.numeric(x) else x)
自动转换type.convert
,但class
向量将转换为character
类。
factor
答案 1 :(得分:3)
您也可以执行类似
的操作lapply(l, function(x) if(is.numeric(t <- type.convert(x))) t else x)
# $a
# [1] 1 1
#
# $b
# [1] "a" "b"
除了来自type.convert()
的数字结果之外,这不会转换任何其他内容。或者,对于这个简单的情况,我们可以使用as.is = TRUE
,但请注意,这并不总能为我们提供我们想要的内容。
lapply(l, type.convert, as.is = TRUE)
# $a
# [1] 1 1
#
# $b
# [1] "a" "b"