考虑以下示例:
data <- data.frame(a = c("a", "b", "c"), b = 1:3, stringsAsFactors = FALSE)
data$b
# [1] 1 2 3
apply(data, 1, function(i) i['b'])
# [1] "1" "2" "3"
class(data$b)
# [1] integer
class(apply(data, 1, function(i) i['b']))
# [1] character
apply(data, 1, function(i) class(i['b']))
# [1] "character" "character" "character"
当数据框仅包含整数类列时,不会发生这种情况。据我所知,apply
强制输出到最小分母(示例中的字符)而不是实际输出(示例中的整数)。但是,这似乎发生在FUN
中定义的闭包内(可以在上一个命令中看到。)
这是一个错误还是这个预期的行为?如果这确实是一个设计规范,有人可以向我解释这有什么意义吗?有没有办法解决这个问题,而不必在每个函数定义中添加as.integer
转换?
提前致谢!