У меня есть векторы символов, как этотманипулируют строки R для получения конкретных результатов
sol=c("119","911","*","ab","ba","*","*","abcd","bcda","abcd","cdab","abcd","dabc","*","*","*","*")
Я хочу взять вектор в то время, и производить вывод, как показано ниже.
Каков самый быстрый способ сделать то же самое? В принципе, я хочу начать новую строку там, где есть *. Если есть последовательные *, то я хочу только одну новую строку. Последовательные не являющиеся * элементы должны быть напечатаны на новую строку и в случае последовательных, не являющихся * элементов, если есть повторяющаяся элемент, то он не должен получить печатную
119 911
ab ba
abcd bcda cdab dabc
Я имею в виду писать для цикла и печатей элементов, пока я не встречу *. Но не уверен, как обеспечить, чтобы как лечить подряд * для получения одной новой линии, а также не знаю, как удалить повторяющийся элемент из последовательного списка не являющихся * элементов
спасибо. Я добавил строку - writeLines (unlist (lapply (mylist, paste, collapse = ""))) , предоставленный в ссылке, которую вы дали, и я получаю то, что я ищу – user2543622
, можно ли объяснить, как работает линия выше ? Я понимаю лап и разделенную часть. Я смущен насчет 'cumsum (sol ==" * ") [sol! =" * "]' Part. Я знаю, что '(sol ==" * ")' возвращает true, ложный список, основанный на настоящем символа * в sol, 'sol! =" * "]' Делает точную противоположность и cumsum является суммарной суммой fuction. Но я путаюсь с тем, как эти вещи работают, когда они вместе. Каков порядок, в котором каждый из них решается? – user2543622
@ user2543622 - когда вы cumsum векторное соответствие * вы получаете счетчик, который увеличивается на 1 каждый раз *. Это означает, что в каждой группе non * у вас есть другое значение постоянного счетчика. Поскольку split работает на векторе, который удаляет значения *, этот же выбор должен произойти и для фактической групповой переменной. Отсюда и подмножество кумулятивной части. Попробуйте разбить код и запустить каждый раздел, чтобы увидеть, как он работает. – thelatemail