用R中的科学记数法用列表中的点替换逗号

时间:2014-12-10 18:01:21

标签: r lapply scientific-notation

我有一个科学记数法的数据列表,使用逗号代替点作为小数分隔符。我想将所有逗号更改为圆点。 在这里很棒的人告诉我如何为数据帧执行此操作:

text <- "3,063E+01 1,775E-02 6,641E-07 3,747E-02"
read.table(text=text, dec = ",")

     V1      V2        V3      V4
1 30.63 0.01775 6.641e-07 0.03747

df <- read.table(text=text)
df <- sapply(df, gsub, pattern = ",", replacement= ".")
df <- sapply(df, as.numeric)

     V1        V2        V3        V4 
3.063e+01 1.775e-02 6.641e-07 3.747e-02 

我想使用lapply对列表执行相同的操作,但它没有用完:

mferg_matrix[[1]]
          X2        X3        X4
84 1,606E-07 1,642E-07 1,731E-07
85 2,883E-07 2,789E-07 2,554E-07

mferg_matrix <- lapply(mferg_matrix,gsub, pattern = ",", replacement= ".")

mferg_matrix[[1]]
[1] "c(30. 52)" "c(33. 55)" "c(35. 51)"

mferg_matrix <- lapply(mferg_matrix,as.numeric)

Es gab 11 Warnungen (Anzeige mit warnings())
> mferg_matrix[[1]]
[1] NA NA NA

使用sapply也没有用。

1 个答案:

答案 0 :(得分:0)

您可能需要使用

lapply(mferg_matrix, function(x) {
           x[] <- lapply(
                       lapply(x,gsub, pattern = ",", replacement= "."),
                                  as.numeric)
                                x})

数据

mferg_matrix <- list(structure(list(X2 = c("1,606E-07", "2,883E-07"),
X3 = c("1,642E-07","2,789E-07"), X4 = c("1,731E-07", "2,554E-07")),
.Names = c("X2", "X3", "X4"), class = "data.frame", row.names = c("84", "85")), 
 structure(list(X2 = c("1,606E-07", "2,883E-07"), X3 = c("1,642E-07", 
 "2,789E-07"), X4 = c("1,731E-07", "2,554E-07")), .Names = c("X2", 
 "X3", "X4"), class = "data.frame", row.names = c("84", "85"
 )), structure(list(X2 = c("1,606E-07", "2,883E-07"), X3 = c("1,642E-07", 
 "2,789E-07"), X4 = c("1,731E-07", "2,554E-07")), .Names = c("X2", 
 "X3", "X4"), class = "data.frame", row.names = c("84", "85"
 )))