Мой вопрос кажется таким же простым, как this, но я не понимаю, что не так.Как округлить значения в списке R - округлять только числовые значения?
У меня есть следующие данные:
myData <- structure(list(structure(0.964671123392506, .Names = "W"), 0.022361343060769242,
structure(0.964695704055953, .Names = "W"), 0.022162269470046909,
structure(0.958418109351607, .Names = "W"), 0.045107813263059401,
structure(0.874545371360235, .Names = "W"), 1.59340622525965e-06), .Dim = c(2L,
4L), .Dimnames = list(c("Measure", "c-value"), c("col1",
"col2", "col3", "col4")))
которые список:
typeof(myData)
[1] "list"
Я хочу округлить все элементы с выбранным количеством цифр. Я не могу просто применить круглую функцию, поэтому я написал следующие функции:
roundMe <- function(x, numbers=3)
{
if (is.numeric(x)) {x <- as.character(sprintf("%3.2f", round(x, digits=numbers)))}
#there's problem:
x
}
и пытался применить его
apply(myData,1:2,roundMe)
, который дает:
col1 col2 col3 col4
Measure List,1 List,1 List,1 List,1
c-value List,1 List,1 List,1 List,1
при изменении "х" в roundMe (последняя строка функции) на as.character (x), он возвращает не округленное число. Что не так? Должен ли я использовать другую функцию приложения? Должен ли я преобразовывать список в, например, в фрейм данных?
есть причина, вы работаете с этой конкретной структурой? – A5C1D2H2I1M1N2O1R2T1
Также у вас есть числовые значения. Не знаете, почему вы проверяете числовое число, когда они все числовые. Кроме того, вы не можете использовать 'round()' в символьной строке. –
Я получил указанную структуру (я меняю имена столбцов и строк), следуя этому ответу: http://stackoverflow.com/questions/21239826/using-shapiro-test-on-multiple-columns-in-a-data-frame – matandked