Вот подход, использующий mutate_all
. Если вы хотите сделать это только для определенных столбцов, вы просто должны использовать mutate_at
и указать вместо них столбцы.
library(dplyr)
library(stringr)
mutate_all(have, funs(chi = as.numeric(str_detect(., "chi")),
bay = as.numeric(str_detect(., "bay")),
gia = as.numeric(str_detect(., "gia")),
sin = as.numeric(str_detect(., "sin"))))
mutate_at
пример с vars
:
want <- have %>% mutate_at(vars(rep1,rep2,rep3), funs(
tox = as.numeric(str_detect(., "chi")),
bay = as.numeric(str_detect(., "bay")),
gia = as.numeric(str_detect(., "gia")),
iso = as.numeric(str_detect(., "sin"))))
Вы не можете. Размер UIPickerView является постоянным.
ОБНОВЛЕНИЕ: оказывается, что можно изменить размер UIPickerView. Прием должен поместить его в другом (меньшем) UIView и изменить размер того представления. Я еще не попробовал это.
ОБНОВЛЕНИЕ 2: Этот метод не изменяет размер UIPickerView, а скорее обрезок это. Это могло бы или не могло бы быть тем, что Вы ищете, но AFAIK, нет никакого способа действительно изменить размер UIPickerView, и это настолько близко, как это добирается. Это не выглядит настолько плохим.
ОБНОВИТЕ 3 (Запоздалый): С SDK 3.0 UIPickerView является использованием абсолютно изменяемого размера initWithFrame или setFrame.
Я вполне уверен, что UIPicker существует одного размера, который Вы не можете изменить. Был бы интересно слышать отличающийся.
Вы можете изменить размер, открыв файл .xib в TextEdit и изменив размер UIPickerView.
На самом деле, я меняю размер своих сборщиков почти для каждого приложения. Не нравится, что они занимают весь экран. Вот метод, который я использую: (обратите внимание, что я также поворачиваю средство выбора, чтобы оно было горизонтальным)
в viewDidLoad .....
picker = [[UIPickerView alloc] initWithFrame:CGRectZero];
picker.delegate = self;
picker.dataSource = self;
picker.showsSelectionIndicator = NO;
//Resize the picker, rotate it so that it is horizontal and set its position
CGAffineTransform rotate = CGAffineTransformMakeRotation(-1.57);
rotate = CGAffineTransformScale(rotate, .46, 2.25);
CGAffineTransform t0 = CGAffineTransformMakeTranslation(3, 22.5);
picker.transform = CGAffineTransformConcat(rotate,t0);
[self.view addSubview:picker];
[picker release];
Затем мне нравится добавлять фоновое изображение для моего представления, которое закрывает серые полосы (которые теперь находятся сверху и снизу) метода делегата UIPicker:
//Create the overlay to superimpose ontop of the picker
//In this case, the image is the size of the screen with a transparent area the size of the //UIPickerView cut out in the middle
UIImageView *uiiv = [[UIImageView alloc]
initWithImage:[UIImage imageNamed:@"problem_bg.png"]];
uiiv.userInteractionEnabled = NO;
uiiv.opaque = YES; //for performance
[self.view addSubview:uiiv];
[uiiv release];
UIPickerView:
-(UIView *) pickerView:(UIPickerView *)pickerView viewForRow:(NSInteger)rowforComponent:(NSInteger)component reusingView:(UIView *)view
{
UIView *viewForRow = [[[UIView alloc] initWithFrame:CGRectMake(0, 0, 100, 280)] autorelease];
UIImageView *img = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"myimage.png"]];
img.frame = CGRectMake(0, 0, 102,280);
img.opaque = YES;
[viewForRow addSubview:img];
[img release];
UILabel *label;
UIFont *font = [ UIFont fontWithName:@"Helvetica" size:20];
label = [[[UILabel alloc] initWithFrame:CGRectMake(10, 20, 270, 100)] autorelease];
label.text = @"I am a label";
label.textAlignment = UITextAlignmentCenter;
label.textColor = [UIColor blackColor];
label.font = font;
label.backgroundColor = [UIColor clearColor];
label.opaque = NO;
[viewForRow addSubview:label];
CGAffineTransform rotate = CGAffineTransformMakeRotation(1.57);
[viewForRow setTransform:rotate];
return viewForRow;
}
Это дает гораздо меньшее горизонтальное средство выбора с приятным внешним видом. Надеюсь, это кому-то поможет.
Нет проблем (я только что зарегистрировался). Кстати, я только что понял, что при размещении ответа, что метод (UIView *) pickerView:(UIPickerView *)pickerView viewForRow:(NSInteger)row forComponent .....
потерял пространство между строкой и forComponent. Поэтому убедитесь, что делегат правильный, иначе он не сработает.
Ответ находится в:
-(UIView *) pickerView:(UIPickerView *)pickerView viewForRow:(NSInteger)row forComponent:(NSInteger)component reusingView:(UIView *)view {
Так как с:
- (NSString*)pickerView:(UIPickerView*)pv titleForRow:(NSInteger)row forComponent:(NSInteger)component
Заставляет его работать (то есть: сбоку с масштабируемой меткой) конечно
.Я боролся с той же проблемой изменения размера окна выбора. После некоторого исследования и головной боли вот что вы можете легко сделать:
В ваших контроллерах перезапишите метод просмотра загрузки.
- (недействительно) loadView
{
// создаем ваше представление
self.view = [[UIView alloc] initWithFrame: CGRectZero];
// создаем PickerView с размером по умолчанию
pickerView = [[UIPickerView alloc] initWithFrame: CGRectZero];
pickerView.delegate = self;
pickerView.dataSource = self;
pickerView.showsSelectionIndicator = ДА;
// Получаем его фрейм
CGRect pickerFrame = pickerView.frame;
// Установите как хотите, я использую высоту экрана по умолчанию, умноженную на коэффициент сжатия, например 0,75 для 3/4 от исходного размера
pickerFrame.size.width = screenWidth * pickerShrinkFactor;
pickerFrame.size.height = pickerHeight * pickerShrinkFactor;
// Вы также можете установить верхний левый угол средства выбора
pickerFrame.origin.x = 0;
// Устанавливаем рамку выбора на новый размер и начало
pickerView.frame = pickerFrame;
// Добавляем в ваше представление
[self.view addSubview: pickerView];
}
Удачи