Полная версия страницы  English  

R Help

Pages: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55
PS2004R, 21.09.2016 15:36
(mytarmail @ 21.09.2016 11:14)
Ссылка на исходное сообщение  1) Имеется ввиду начальная выборка или та про которую я говорил в последнем абзаце?

2) Можете как то по другому (попроще) объяснить,  я слабо разбираюсь в терминологии и не понял про "центры кластеров"


Есть центры кластеров (в k-means). Их полностью достаточно для классификации новой точки..

https://ru.wikipedia.org/wiki/K-means
mytarmail, 24.09.2016 16:37
Здравствуйте!

есть у меня вектор с временем "Х" в нем "часы и минуты"

CODE
x
"08:46" "08:51" "08:56" "09:01" "09:06" "09:11" "09:16" "09:21" "09:26" "09:31"
class(x)
"character"


как мне отнять одну минуту от этого вектора чтоб получилось
CODE

"08:45" "08:50" "08:55" "09:00" "09:05".....


и чтобы вектор потом остался "character"
Guest, 24.09.2016 18:48
искать кому понадобилось для difftime написать полноценный format() smile.gif

ну или написать такое преобразование самому.
Guest, 24.09.2016 18:51
(Guest @ 24.09.2016 18:48)
Ссылка на исходное сообщение  искать кому понадобилось для difftime написать полноценный format() smile.gif

ну или написать такое преобразование самому.


PS о, вот нашелся такой человек

http://r.789695.n4.nabble.com/Formatting-d...s-td914912.html
mytarmail, 25.09.2016 08:51
(Guest @ 24.09.2016 19:51)
Ссылка на исходное сообщение  PS о, вот нашелся такой человек

http://r.789695.n4.nabble.com/Formatting-d...s-td914912.html



спасибо, нашел решение попроще...

CODE
x <- c("08:46", "08:51", "08:56", "09:01", "09:06", "09:11", "09:16", "09:21", "09:26", "09:31")
library(lubridate)
x <- parse_date_time(x, orders="H!:M!") - minutes(1)
x <- format(x, "%H:%M")
x
mytarmail, 16.10.2016 16:04
Здравствуйте!
Есть алгоритм dtw и соответствующие пакеты "dtw" и "dtwclust" , суть алгоритма в том что он может сравнивать два ВР на схожесть даже если они разной длинны, ну и еще некоторые задачи с помощью его решают...

Но как с ним работают в контексте маш. обуч. ?? вот решил я обучить допустим нейросеть вместе с dtw , но как это делается вообще? нарезать разные куски ВР и потом их кластеризировать dtw? или когда уже сеть обучилась новые данные которые поступают в сеть подавать разными кусками через dtw?

Поясните пожалуйста как это все делается? а то информации про это я не нашел, на русском точно нет
PS2004R, 16.10.2016 18:09
(mytarmail @ 16.10.2016 16:04)
Ссылка на исходное сообщение 
Поясните пожалуйста как это все делается? а то информации  про это я не нашел, на русском точно нет


Да навалом информации. Всё методы ML которые используют матрицу на выходе dist() подходят.

В чем разница использовать сами случаи выборки и результат dist() на них... ну во втором случае в чистом виде задача распознавание образов получается -- есть некий граф, вершины которого по свойствам ребер надо раскрасить, задача с полным перебором при решении с которой сражаются всякими эвристиками.
ПолинаШ, 17.10.2016 18:02
Вот столкнулась с парадоксом.
Решаю задачу с большим числом переборов и несколькими вызываемыми друг из друга функциями.
Результаты (очень небольшая часть переборов) хочу помещать по мере расчетов в глобально объявленный list. Но столкнулся с тем, что, если добавление в list вести в теле какой-нибудь функции, то туда ничего не добавляется.
Как-то так:
   
    BitMask <-  c("000", "001", "010", "011", "100", "101", "110", "111")
  minNum <- 3
    ColCom = c("x2", "x4", "x7")
    vec_neg <- c("100", "011", "010", "101", "110", "001", "110", "011")
    vec_pos <- c("010", "101", "100", "001", "111", "111", "111", "111")
    Sklad <- list()
# ---- Фрагмент с sapply
    nK <- sapply(BitMask, function(x) {
      if (sum(x==vec_neg)>0) return (0)
      countK = sum(x==vec_pos) ; if (minNum>countK) return (0)
      Sklad[[length(Sklad)+1]] <- list(countK=countK, ColCom=ColCom,
            Bits=x, RowList = which(vec_pos %in% x))
    return (countK) } )
#  Вывод результатов
Sklad
<Null list>

Sklad[[length(Sklad)+1]] <- list(countK=4, ColCom=ColCom, Bits="111", RowList = which(vec_pos %in% "111"))
Sklad

    Sklad <- list()
    for (x in BitMask)    {
      if ((sum(x==vec_neg)==0) & ((countK = sum(x==vec_pos))>= minNum))        {
    Sklad[[length(Sklad)+1]] <- list(countK=countK, ColCom=ColCom,
            Bits=x, RowList = which(vec_pos %in% x))        }
    }
Sklad

[[1]]
[[1]]$countK
[1] 4

[[1]]$ColCom
[1] "x2" "x4" "x7"

[[1]]$Bits
[1] "111"

[[1]]$RowList
[1] 5 6 7 8

Но, если фрагмент с for поместить в тело какой-нибудь функции, то опять получаем пустой list. Как тут быть? Обходиться совсем без функций или помещать результаты в таблицу - некошерно. Создавать список с lapply() и потом урезать его на 99% - варварство...
plantago, 17.10.2016 22:14
Потому что нужен "<<-"
CODE

>  BitMask <-  c("000", "001", "010", "011", "100", "101", "110", "111")
>   minNum <- 3
>     ColCom = c("x2", "x4", "x7")
>     vec_neg <- c("100", "011", "010", "101", "110", "001", "110", "011")
>     vec_pos <- c("010", "101", "100", "001", "111", "111", "111", "111")
>     Sklad <- list()
> # ---- Фрагмент с sapply
>     nK <- sapply(BitMask, function(x) {
+       if (sum(x==vec_neg)>0) return (0)
+       countK = sum(x==vec_pos); if (minNum>countK) return (0)
+       Sklad[[length(Sklad)+1]] <<- list(countK=countK, ColCom=ColCom,
+             Bits=x, RowList = which(vec_pos %in% x))
+     return (countK)
+  } )
> Sklad
[[1]]
[[1]]$countK
[1] 4

[[1]]$ColCom
[1] "x2" "x4" "x7"

[[1]]$Bits
[1] "111"

[[1]]$RowList
[1] 5 6 7 8
massachusets, 19.10.2016 16:49
Добрый день!
Есть таблица значений: a,b,c,... В итоге нужно получить матрицу, на пересечении строк и столбцов которой будет стоять разница элементов таблицы. Т.е., столбец 1: a-a, a-b, a-c, ...столбец 2: b-a, b-b, b-c,... и т.д. Получится зеркальная матрица, по диагонали у которой будут нули.
Проблема в том, что хотя я и написал цикл, высчитывающий разницу между элементами таблицы, а вот в матрицу их загнать у меня не выходит.
Сам код:
n<-length (istok$Price)
for (i in 1:n) {
for (k in 1:n) {
print (matrix(istok$Price[[i]]-istok$Price[[k]], n, n))
}
}
То есть, я так понимаю, при вычислении разностей выводится последовательность вычислений, а не вектор. Подскажите, как сделать чтобы все результаты загнать в один вектор а потом из него построить матрицу?
Заранее спасибо.
plantago, 19.10.2016 17:34
См. внимательно два предыдущих сообщения smile.gif
PS2004R, 20.10.2016 08:50
(massachusets @ 19.10.2016 16:49)
Ссылка на исходное сообщение  Добрый день!
Есть таблица значений: a,b,c,...


1. Это не _таблица_, это _вектор_.

2. За написание каждой из операций по ссылке никто не получил ни одной копейки. Просто каждая из операций реально понадобилась массе людей при работе с R.
http://stat.ethz.ch/R-manual/R-devel/libra...ml/00Index.html

CODE

> ?outer
> outer(1:10, 1:10, FUN="-")
     [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
[1,]    0   -1   -2   -3   -4   -5   -6   -7   -8    -9
[2,]    1    0   -1   -2   -3   -4   -5   -6   -7    -8
[3,]    2    1    0   -1   -2   -3   -4   -5   -6    -7
[4,]    3    2    1    0   -1   -2   -3   -4   -5    -6
[5,]    4    3    2    1    0   -1   -2   -3   -4    -5
[6,]    5    4    3    2    1    0   -1   -2   -3    -4
[7,]    6    5    4    3    2    1    0   -1   -2    -3
[8,]    7    6    5    4    3    2    1    0   -1    -2
[9,]    8    7    6    5    4    3    2    1    0    -1
[10,]    9    8    7    6    5    4    3    2    1     0
massachusets, 20.10.2016 11:16
Спасибо!
Язык учу без месяца неделю, и под рукой спросить не у кого...
PS2004R, 20.10.2016 11:27
(massachusets @ 20.10.2016 11:16)
Ссылка на исходное сообщение  
Язык учу без месяца неделю, и под рукой спросить не у кого...


Обязательно прочитайте-просмотрите список функций {base} по ссылке из предыдущего сообщения. Если всерьез занялись R 80-90% они обязательно понадобиться.

Фактически все эти функции введены исходя из практики написания кода в R, и представляют из себя типовые "кубики", которые писать на самом R по каким то соображениям не удобно.
mytarmail, 02.11.2016 15:42
Здравствуйте!
Не знаю как решить такую задачку чтобы было быстро и просто, и самое главное производительно

есть данные типа таких
CODE
dat
  cluster1 cluster2 cluster3 cluster4 cluster5 target.label
1        24        5       18       21       16            1
2         2       15       12        7       22            1
3        13       13       16       29       24            0
4        23       28       22       10        4            1
5         6       12       20       25       11            0
6        25       17       14       24       25            1
7        30       27        2        4       14            0
8        11        2       21        6        9            0
9        20       20       29       17       10            1
10        7       30       25       11       15            0
11       19        8       15        8       18            0
12        3       18        1       16       26            0
13       17        9       23       14        8            0
14        5        6        5       22       19            0
15        9       19        9       12       20            1
16       21        3        3       13       23            1
17       10       16        4       26        2            1
18       18        4       28        3        6            0
19       28       24        7       20       12            0
20        8       11       11       23        7            1
21       15       14        6       27       27            0
22       26       29       26       28       29            1
23       16        1       10        2       17            0
24        1        7       17       15       21            0
25       27       23       30        5       13            1
26       12       22       19        9       30            1


на самом деле колонок в соти раз больше, это просто для примера

В данных у нас колонки с кластерами с диапазоном от 1 до 30 каждый и последняя колонка с целевой которая может иметь значения 0 или 1


1) не учитывая target.label нужно найти такие строчки которые повторяются не менее 10 раз в всей выборке
2) в каждой из найденных одинаковых групок которые повторялись, количество "1" в target.label должно превышать 70% по отношению к "0"

CODE
типа так, вот найденные одинаковые строчки
единичек больше чем нулей
cluster1 cluster2 cluster3 cluster4 cluster5  target.label
1        24        5       18       21       16            1
2        24        5       18       21       16            1
3        24        5       18       21       16            0
4        24        5       18       21       16            1
5        24        5       18       21       16            1
6        24        5       18       21       16            1
7        24        5       18       21       16            1
8        24        5       18       21       16            0
9        24        5       18       21       16            1
10      24        5       18       21       16            1
.....
.....
......

3) поиск этих одинаковых строчек идет по всем возможным комбинациям из колонок
типа
cluster1 и cluster2
cluster1 и cluster5 и cluster2
cluster3 и cluster1 cluster5 и cluster2............

4) найденные строчки которые прошли этапы 1) и 2) записываются в лист в виде
названий кластеров и их цифровых значений

CODE
cluster1 cluster2 cluster3 cluster4 cluster5 target.label sum.duplicate.finded
1        24        5       18       21       16                  75%                   33


где
CODE
cluster1 cluster2 cluster3 cluster4 cluster5
1        24        5       18       21       16  

номера и имена кластеров
CODE
target.label
75%

в сколько раз единичек было больше чем нулей в target.label
CODE
sum.duplicate.finded
33

сколько именно этих одинаковых строчек было найдено в истории
plantago, 03.11.2016 01:34
Я бы просто стал писать код, пункт за пунктом. Ну а спрашивать стал бы, приводя готовый код в пример wink.gif
mytarmail, 03.11.2016 10:59
(plantago @ 03.11.2016 02:34)
Ссылка на исходное сообщение  Я бы просто стал писать код, пункт за пунктом. Ну а спрашивать стал бы, приводя готовый код в пример wink.gif

Был бы готовый код, о чем тогда спрашивать? smile.gif

Ну да ладно я вас понял, просто я хотел посмотреть как бы это делали профессионалы так как быстродействие тут очень важно, или может даже бы подсказали есть ли какой то пакет в котором это все уже сделано...

для меня на данном этапе не понятны только две вещи

1) как из данных вычленить группы строк которые повторялись от 10 раз и более
2) как из этих найденных групп вычленить такие группы в которых количество единичек в target.label превышает количество нулей на 70%


поможете?

Я пытаюсь создать некий глубокий классификатор который пытается объяснить не всю целевую как это делаться стандартно.. Классификатор поступает умно, он обучается только на той части целевой которую он действительно может объяснить с сильным стат. перевесом, а это по сути избавление от переобучения
bf109xxl, 09.11.2016 16:49
(mytarmail @ 03.11.2016 09:59)
Ссылка на исходное сообщение  
1) как из данных вычленить группы строк которые повторялись от 10 раз и более
Элементарно. Воспользуйтесь квази-"хеш"-функцией:
CODE
dat$hash <- apply(dat[,1:5],MARGIN = 1, FUN=function(x) sum(x*100^c(4:0)))

2) как из этих найденных групп вычленить такие группы в которых количество единичек в target.label превышает количество нулей на 70%
поможете?
Тоже элементарно.
CODE
nnn <- tapply(dat$target.label,dat$hash,length)
qqq <- tapply(dat$target.label,dat$hash,sum)
tgt.lbl <- (qqq/nnn)[nnn>10]
dat$hash[dat$hash %in% rownames(tgt.lbl[tgt.lbl>0.63])]


Ну, сделать фрейм данных из вышеприведенного, думаю, труда не составит.
mytarmail, 17.11.2016 22:51
(bf109xxl @ 09.11.2016 17:49)
Ссылка на исходное сообщение  Элементарно. Воспользуйтесь квази-"хеш"-функцией:
CODE
dat$hash <- apply(dat[,1:5],MARGIN = 1, FUN=function(x) sum(x*100^c(4:0)))

Тоже элементарно.
CODE
nnn <- tapply(dat$target.label,dat$hash,length)
qqq <- tapply(dat$target.label,dat$hash,sum)
tgt.lbl <- (qqq/nnn)[nnn>10]
dat$hash[dat$hash %in% rownames(tgt.lbl[tgt.lbl>0.63])]


Ну, сделать фрейм данных из вышеприведенного, думаю, труда не составит.

Спасибо вам, вот какое решение мне предложили на stackoverflow
вот почему я и говорил что хотел бы увидеть как это делают профессионалы, так как мои решения такие же громоздкие как и по ссылке выше, а я таки чувствовал что можно намного лучше это реализовать, спасибо еще раз
plantago, 18.11.2016 02:05
Очень хорошо, что кому-то было не лень сделать эту работу за Вас smile.gif
Кстати, я сомневаюсь, что "тыр-дыр" пакеты "обеспечивают максимальную скорость исполнения" smile.gif
PS2004R, 18.11.2016 08:49
(plantago @ 18.11.2016 02:05)
Ссылка на исходное сообщение  Очень хорошо, что кому-то было не лень сделать эту работу за Вас smile.gif
Кстати, я сомневаюсь, что "тыр-дыр" пакеты "обеспечивают максимальную скорость исполнения" smile.gif


Тут вообще повеситься реально frown.gif


Картинки:
картинка: _________________2016_11_18_08_48_07.png
_________________2016_11_18_08_48_07.png — (2.66)   

mytarmail, 18.11.2016 14:08
(plantago @ 18.11.2016 03:05)
Ссылка на исходное сообщение  Очень хорошо, что кому-то было не лень сделать эту работу за Вас smile.gif
Кстати, я сомневаюсь, что "тыр-дыр" пакеты "обеспечивают максимальную скорость исполнения" smile.gif


Повторю еще раз для тех кому вчитываться в написанное лень smile.gif
У меня было свое решение но оно меня не устраивало из за медленности и громоздкости, на stackoverflow мне предлагали такие же громоздкие решения, потому и написал сюда, потому что знал что можно написать намного лучше, но не знал как
plantago, 18.11.2016 17:42
Если оно у Вас было, почему Вы его не привели здесь?
plantago, 18.11.2016 17:55
(PS2004R @ 18.11.2016 01:49)
Ссылка на исходное сообщение  Тут вообще повеситься реально frown.gif

А это что за график?
PS2004R, 18.11.2016 18:44
(plantago @ 18.11.2016 17:55)
Ссылка на исходное сообщение  А это что за график?


У человека уже два аккаунта там (один он спалил в процессе старта троллинга сразу), это статистика второго.
mytarmail, 19.11.2016 12:43
(plantago @ 18.11.2016 18:55)
Ссылка на исходное сообщение Если оно у Вас было, почему Вы его не привели здесь?


Потому что я знал что "нормальное" решение будет принцыпиально иным, я там вообще циклами делал...
mytarmail, 19.11.2016 12:47
(PS2004R @ 19.11.2016 13:43)
Ссылка на исходное сообщение У человека уже два аккаунта там (один он спалил в процессе старта троллинга сразу), это статистика второго.


у человека два аккаунта потому что человек регистрировался и на русском и на английском stackoverflow...
Найдете тролинг, дам медаль.
В наших краях то что вы сейчас делаете называется балаболить, таких не уважают
ПолинаШ, 20.01.2017 14:01
Хочу сравнить качество моделей простейших бинарных классификаторов, да еще и с разным набором предикторов.
Предполагаю выполнить простую 10-кратную кросс-проверку и сравнить либо точность, либо ROC моделей.
Использую train() и вижу, что вместо моделей дискриминантного анализа и логит-регрессии она начинает перебирать модели Random Forrest:
lda.step.pro <- train(DGlass[,3:4], DGlass$F1,metod="lda",
  trControl = trainControl(method = "cv", classProbs = TRUE), metric = "Accuracy")
lda.step.pro$finalModel
Call:
randomForest(x = x, y = y, mtry = param$mtry, metod = "lda")
.
lm.step.pro <- train(F1 ~., data= DGlass[,-c(1,4,10,12)], metod="glm",
family=binomial, trControl = trainControl(method = "cv", classProbs = T,
summaryFunction = twoClassSummary ))
Call:
randomForest(x = x, y = y, mtry = param$mtry, metod = "glm",      family = ..2)

Это что - живет она так, или это мой глюк? Как это все объяснить?
В инете что-то не нахожу никаких внятных объяснений. Как я смогу сравнить, например, модели LDA и QDA, если первая на самом деле RandomForrest и по определению будет эффективней.
plantago, 20.01.2017 19:52
> ?train
No documentation for ‘train’ in specified packages and libraries:
you could try ‘??train’
===
Не предполагайте, пожалуйста, телепатию у читающих Ваше сообщение.
PS2004R, 20.01.2017 20:19
(plantago @ 20.01.2017 19:52)
Ссылка на исходное сообщение  > ?train
No documentation for ‘train’ in specified packages and libraries:
you could try ‘??train’
===
Не предполагаете, пожалуйста, телепатию у читающих Ваше сообщение.



Скорее всего это library(caret). Хотя написать про это _явно_ было бы очень хорошо.

В R даже специальную команду встроили для описания текущей сессии smile.gif

CODE

> sessionInfo()
R version 3.2.3 (2015-12-10)
Platform: x86_64-pc-linux-gnu (64-bit)
Running under: Ubuntu 14.04.5 LTS

locale:
[1] LC_CTYPE=ru_RU.UTF-8       LC_NUMERIC=C              
[3] LC_TIME=ru_RU.UTF-8        LC_COLLATE=ru_RU.UTF-8    
[5] LC_MONETARY=ru_RU.UTF-8    LC_MESSAGES=ru_RU.UTF-8  
[7] LC_PAPER=ru_RU.UTF-8       LC_NAME=C                
[9] LC_ADDRESS=C               LC_TELEPHONE=C            
[11] LC_MEASUREMENT=ru_RU.UTF-8 LC_IDENTIFICATION=C      

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base    

loaded via a namespace (and not attached):
[1] Rcpp_0.12.8        magrittr_1.5       splines_3.2.3      MASS_7.3-45      
[5] munsell_0.4.3      colorspace_1.2-6   lattice_0.20-30    foreach_1.4.3    
[9] minqa_1.2.4        stringr_1.0.0      car_2.1-1          plyr_1.8.4        
[13] tools_3.2.3        parallel_3.2.3     nnet_7.3-12        pbkrtest_0.4-6    
[17] caret_6.0-65       grid_3.2.3         gtable_0.2.0       nlme_3.1-125      
[21] mgcv_1.8-11        quantreg_5.21      MatrixModels_0.4-1 iterators_1.0.8  
[25] lme4_1.1-11        lazyeval_0.2.0     assertthat_0.1     tibble_1.2        
[29] Matrix_1.2-3       nloptr_1.0.4       reshape2_1.4.1     ggplot2_2.2.0    
[33] codetools_0.2-11   stringi_1.1.1      scales_0.4.1       stats4_3.2.3      
[37] SparseM_1.7      
>
PS2004R, 20.01.2017 20:27
(ПолинаШ @ 20.01.2017 14:01)
Ссылка на исходное сообщение  Хочу сравнить качество моделей простейших бинарных классификаторов, да еще и с разным набором предикторов.
Предполагаю выполнить простую 10-кратную кросс-проверку и сравнить либо точность, либо ROC моделей.
Использую train() и вижу, что вместо моделей дискриминантного анализа и логит-регрессии она  начинает перебирать модели Random Forrest:

Это что - живет она так, или это мой глюк? Как это все объяснить?
В инете что-то не нахожу никаких внятных объяснений. Как я смогу сравнить, например, модели LDA и QDA, если первая на самом деле RandomForrest и по определению будет эффективней.



Это легко пояснить, параметр называется на самом деле:

CODE


    ## Default S3 method:
    train(x, y,
          method = "rf",  
          preProcess = NULL,
          ...,
          weights = NULL,
          metric = ifelse(is.factor(y), "Accuracy", "RMSE"),  
          maximize = ifelse(metric %in% c("RMSE", "logLoss"), FALSE, TRUE),
          trControl = trainControl(),
          tuneGrid = NULL,
          tuneLength = 3)

---------8<----------
---------8<----------

 method: a string specifying which classification or regression model
         to use. Possible values are found using
         ‘names(getModelInfo())’. See <URL:
         http://topepo.github.io/caret/bytag.html>. A list of
         functions can also be passed for a custom model function. See
         <URL: http://topepo.github.io/caret/custom_models.html> for
         details.
ПолинаШ, 21.01.2017 10:11
Прошу покорно прощения у сообщества за отнятое время. И большое спасибо за ответ.
Но все оказалось до нелепости просто: слово method написано с очепяткой как metod, поэтому обучение запускается со значением параметра по умолчанию - а это как раз "rf". Я вся в смущении из-за своей невнимательности.
plantago, 21.01.2017 21:36
Вот оно как. Спасибо. Но у меня появился теперь вопрос, и быстрым поиском я его решить не могу.

Есть ли какой-то способ запретить выполнение "...", если это выражение уже участвует в определении функции?

Надеюсь, понятно, как это связано с предыдущими сообщениями. Если нет, то пример:

function1 <- function(a, ...) print(a)
function2 <- function(a) print(a)
function1(1)
function1(1, lkfevkrewj="kejfkjrew")
function2(1)
function2(1, kreqjfkrejw="frewfvre")

Такой запрет очень бы помог в случае ПолинаШ
PS2004R, 21.01.2017 22:36
(plantago @ 21.01.2017 21:36)
Ссылка на исходное сообщение  Вот оно как. Спасибо. Но у меня появился теперь вопрос, и быстрым поиском я его решить не могу.

Есть ли какой-то способ запретить выполнение "...", если это выражение уже участвует в определении функции?

Надеюсь, понятно, как это связано с предыдущими сообщениями. Если нет, то пример:

function1 <- function(a, ...) print(a)
function2 <- function(a) print(a)
function1(1)
function1(1, lkfevkrewj="kejfkjrew")
function2(1)
function2(1, kreqjfkrejw="frewfvre")

Такой запрет очень бы помог в случае ПолинаШ


Это часть компилятора,

CODE

‘...’ and ‘..1’, ‘..2’ etc, which are used to refer to arguments
    passed down from a calling function.  See the ‘Introduction to R’
    manual for usage of these syntactic elements, and dotsMethods for
    their use in formal methods.



с вот такими ручками доступа ?dotsMethods
plantago, 21.01.2017 23:17
О, это уже горячо, спасибо.
Но зачем же train() теряет троеточие, как моя function1()?
Более того, троеточие теряют и более простые функции, например, mean(). Пока мне приходит в голову только, что это сделано для того, чтобы потом была возможность формировать вызов функции по кусочкам, например, через match.call() (как это делает write.csv() -- хотя в этом случае как раз все сделано нормально, неправильные аргументы не проходят).

UPDATE. Возможно, для того, чтобы делить троеточие между функциями, чтобы mean() не ругался на чужие аргументы. http://stackoverflow.com/questions/1768893...ument-mean-in-r

Но это все равно не то что бы небезопасно, но как-то неправильно, что ли. Выглядит как "dirty trick".

Мораль пока одна -- надо быть осторожным с "...". Пойду-ка я по своим функциям и проверю, действительно ли везде это нужно.

А может, написать автору caret и указать на проблему?

(Подумал еще что, если бы ПолинаШ написала me="lda", все бы было нормально. Хорошая идея, но нет frown.gif не выйдет, см. ?train).
PS2004R, 21.01.2017 23:40
(plantago @ 21.01.2017 23:17)
Ссылка на исходное сообщение  О, это уже горячо, спасибо.
Но зачем же train() теряет троеточие, как моя function1()?
Более того, троеточие теряют и более простые функции, например, mean(). Пока мне приходит в голову только, что это сделано для того, чтобы потом была возможность формировать вызов функции по кусочкам, через match.call().


он ничего не теряет, он так сделан smile.gif

CODE

> caret:::train
function (x, ...)
{
   UseMethod("train")
}


он фактически плавно (ну насколько позволяет ?UseMethod) переходит к вызову

CODE

> caret:::train.default
function (x, y, method = "rf", preProcess = NULL, ..., weights = NULL,
   metric = ifelse(is.factor(y), "Accuracy", "RMSE"), maximize = ifelse(metric %in%
       c("RMSE", "logLoss"), FALSE, TRUE), trControl = trainControl(),
   tuneGrid = NULL, tuneLength = 3)
{
----8<---
----8<---
}


скорее всего от там ругается на неиспользованный параметр
plantago, 22.01.2017 00:02
В общем, я обнаружил у себя 4 случая, когда троеточие было явно лишним, и убрал.
Раньше я думал, что это не имеет большого значения...
plantago, 28.01.2017 03:44
Большой праздник для любителей R и круглых чисел!
Это случилось сегодня smile.gif (нужно щелкнуть на картинку)
r_10000.gif - кликните, чтобы открыть увеличенную картинку
penkin.2011, 08.02.2017 16:01
Добрый день. Подскажите, пожалуйста, мне нужно открыть файл json
http://rgho.st/769vTPB4X
юзаю простой код
library("rjson")


json_file <- "C:/Users/админ/Downloads/N1.json"
json_data <- fromJSON(paste(readLines(json_file), collapse=""))

Но выдает ошибку
Warning message:
In readLines(json_file) :
incomplete final line found on 'C:/Users/Константин/Downloads/N1.json'

Подскажите, в чем дело. Мне просто нужно из всех полей содержащие полнотекстовые сообщения выгрузить все слова в txt. Как это сделать?
Спасибо
plantago, 08.02.2017 18:19
Это не ошибка, это предупреждение. Обычно его можно просто проигнорировать.
Сам-то объект json_data нормальный получился? Проверили?
penkin.2011, 08.02.2017 18:32
В том то и дело, если его открыть через notepad ++, там все данные одной строкой
Как его структурировать чтобы текст вытащить?
plantago, 08.02.2017 20:16
Как говорится, УМВР:

library(rjson)
json_data <- fromJSON(paste(readLines("N1.json"), collapse=""))
# ignore warning!
str(json_data)
# very long output
is.list(json_data)
# TRUE
write(file="new.txt", unlist(json_data))

После чего new.txt читается текстовым редактором без проблем. Только совершенно непонятно, этого ли Вы хотите или нет wink.gif
penkin.2011, 08.02.2017 21:51
plantago, почти, Вы сделали все ок, но в текстовый документ нужно выгрузить только те тексты, которые помечены как текст
т.е. так $ text
естественно без префиксов .$ text : chr

.$ text : chr "Between Two Ferns With Zach Galifianakis: Hillary Clinton https://t.co/qvxJ3XzIW4 via @YouTube"
plantago, 09.02.2017 06:09
На Вас не угодишь smile.gif
Сколько заплатите за решение? wink.gif
plantago, 09.02.2017 06:15
Ладно, вот Вам бесплатно:

library(rjson)
json_data <- fromJSON(paste(readLines("N1.json"), collapse=""))
uu <- unlist(json_data)
uutext <- uu[names(uu) == "text"]
write(uutext, file="text.txt")

Хотя опять-таки мне непонятно, что эта политика делает на биологическом форуме wink.gif

И учитесь правильно формулировать вопросы, в следующий раз Вам вполне могут тут не ответить. И будут правы.
penkin.2011, 09.02.2017 10:04
plantago, спасибо Вамsmile.gif Ну политика везде и в биологии и так далее. Где ее только нетsmile.gif
Ну, а если серьезно, я искал форум не по специальности, а где есть помощь по R. Вышел Ваш.
Нужно в рунете создать форум посвященный вопросам в R в целом, а не только для биологовsmile.gif
penkin.2011, 10.02.2017 15:55
Ещё раз простите, за то что не в профильный форум пишу.
Скажите, а что значит это ошибка и как её исправить
> tdm = as.matrix(tdm)
Error: cannot allocate vector of size 28.5 Gb
> #
PS2004R, 10.02.2017 17:19
(penkin.2011 @ 10.02.2017 15:55)
Ссылка на исходное сообщение  Ещё раз простите, за то что не в профильный форум пишу.
Скажите, а что значит это ошибка и как её исправить
> tdm = as.matrix(tdm)
Error: cannot allocate vector of size 28.5 Gb
> #


Дословно означает что не хватило оперативной памяти. Если это не по причине использования 32-разрялной версии R, то надо считать на машине где имеется достаточно ОЗУ.
penkin.2011, 10.02.2017 18:11
Ничевоськи-себески. Сколько же ему надо. 24 гига оперативы. Это все тот же файлик, когда делаю dtm матричку
А как быть тогда?
PS2004R, 10.02.2017 18:14
(penkin.2011 @ 10.02.2017 18:11)
Ссылка на исходное сообщение  Ничевоськи-себески. Сколько же ему надо. 24 гига оперативы. Это все тот же файлик, когда делаю dtm матричку
А как быть тогда?


Как все -- оставить часть матрицы (обычно по частоте встречаемости термина). Ну или выбрать метод факторизации итеративный, который работает с порциями данных.
Это — лёгкая версия форума. Чтобы попасть на полную, щелкните здесь.
Invision Power Board © 2001-2024 Invision Power Services, Inc.