пожалуйста, прочитайте о stringsAsFactors
df <- data.frame(v1 = c("3.6854756000000001848,-6.4375996000000004216,8.8997513999999995349",
"1.8968172299999999098,-5.4934801999999995914,1.5116269712000001135"),
v2 = c("2.8782294999999997742,-2.5761130000000000972,3.0410891000000002116",
"2.1329812999999999690,-9.3830139999999992995,7.5242144999999993615"),
stringsAsFactors = FALSE)
, возможно, одно из более быстрых решений:
sum(as.numeric(unlist(lapply(df, strsplit, ","))))
#[1] 7.679979
, как @Roland заявляет в комментарии,Основная проблема здесь не в суммировании чисел.Проблема в том, что ваши числа вставляются в виде строк с "," в качестве разделителя.Посмотрите, сможете ли вы намного раньше в своем рабочем процессе предотвратить эту «болезнь».
Если вы не можете предотвратить странный формат ввода, ваш первый шаг может выглядеть следующим образом:
df_numerics <- as.data.frame(lapply(df, function(x) {as.numeric(unlist(lapply(x, strsplit, ",")))}))
Должно быть достаточно быстро:
theta <- with( df_numerics,
acos( sum(v1*v2) / ( sqrt(sum(v1 * v1)) * sqrt(sum(v2 * v2)) ) )
)
#[1] 0.7876798
Если нет, возможно, вам придется вызывать c, c ++ и / или идти параллельно.