我删除了以下列表元素:
head(roc.split[[17]][3])
SCORE
23514 0.0
22298 0.01
22314 0.01
22429 0.01
22240 -0.02
22592 -0.04
我想要获取SCORE的绝对值 - 仅适用于这一个元素。但是当我做以下事情时:
abs(roc.split[[17]][3])
Math.data.frame中的错误(roc.split [[17]] [3]): 数据框中的非数字变量:SCORE
这似乎是因为SCORE被归类为角色:
summary(roc.split[[17]][3])
SCORE
Length:668
Class :character
Mode :character
但是以下内容也不起作用:
abs(as.numeric(roc.split[[17]][3]))
错误:(list)对象无法强制键入'double
所以我猜我的问题是 - 如何在这个特定的列表元素中获取SCORE列的绝对值?
感谢。
答案 0 :(得分:1)
发生第二个错误是因为您尝试将整个数据帧转换为数字。
#Dummy Data
dput(d1)
structure(list(v1 = c("1", "2", "-4", "-5", "8")), .Names = "v1", row.names = c(NA,
-5L), class = "data.frame")
abs(d1)
Math.data.frame(d1)中的错误:数据框中的非数字变量:v1
as.numeric(d1)
错误:( list)对象无法强制输入'double'
要使其发挥作用,您可以在向量SCORE
上调用它(在本例中为v1
),或使用transform
将其转换为数字,即
abs(as.numeric(d1$v1))
#[1] 1 2 4 5 8
abs(transform(d1, v1 = as.numeric(v1)))
# v1
#1 1
#2 2
#3 4
#4 5
#5 8
注意:将数据框转换为数字(来自字符)的正确方法是
d1[] <- lapply(d1, as.numeric)
如果您有要转换为数字的列表,那么
l1 <- list(d1, d1, d1)
l1 <- lapply(l1, function(i){i[] <- lapply(i, as.numeric); i})
#and to get the absolut values of all data frames in l1 then simply,
l1 <- lapply(l1, abs)
#Or All in one go,
l1 <- lapply(l1, function(i) {i[] <- lapply(i, as.numeric); abs(i)})