Вы можете использовать lapply
, чтобы передать каждый столбец в str_length
, а затем cbind
в исходный data.frame
...
library(stringr)
out <- lapply( df , str_length )
df <- cbind( df , out )
# col1 col2 col1 col2
#1 abc adf qqwe 3 8
#2 abcd d 4 1
#3 a e 1 1
#4 abcdefg f 7 1
Некоторые старые версии Windows имитировали конвейеры через файлы (поэтому они были подвержены таким проблемам), но это не было проблемой более 10 лет. Попробуйте добавить
sys.stdout.flush()
к производителю после print
, а также попробуйте сделать стандартный вывод производителя небуферизованным (с помощью python -u
).
Конечно, это не так ' t поможет, если у вас нет контроля над производителем - если он буферизует слишком много своих выходных данных, вам все равно придется ждать долго.
К сожалению - хотя существует множество подходов к решению этой проблемы в Unix-подобных системах такие системы, как pyexpect, pexpect , exscript и paramiko , я сомневаюсь, что какая-либо из них работает в Windows; если это действительно так, я бы попробовал Cygwin ,
Это касается ввода-вывода, который по умолчанию буферизируется с помощью Python. Передайте интерпретатору параметр -u
, чтобы отключить это поведение:
python -u producer.py | python consumer.py
Это решает проблему для меня.