Вы можете сделать это двумя способами:
В моем (диаграммном) редакторе есть четыре уровня изменений состояния:
@implementation TestClass
- (void) dealloc
{
// If you don't remove yourself as an observer, the Notification Center
// will continue to try and send notification objects to the deallocated
// object.
[[NSNotificationCenter defaultCenter] removeObserver:self];
[super dealloc];
}
- (id) init
{
self = [super init];
if (!self) return nil;
// Add this instance of TestClass as an observer of the TestNotification.
// We tell the notification center to inform us of "TestNotification"
// notifications using the receiveTestNotification: selector. By
// specifying object:nil, we tell the notification center that we are not
// interested in who posted the notification. If you provided an actual
// object rather than nil, the notification center will only notify you
// when the notification was posted by that particular object.
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(receiveTestNotification:)
name:@"TestNotification"
object:nil];
return self;
}
- (void) receiveTestNotification:(NSNotification *) notification
{
// [notification name] should always be @"TestNotification"
// unless you use this method for observation of other notifications
// as well.
if ([[notification name] isEqualToString:@"TestNotification"])
NSLog (@"Successfully received the test notification!");
}
@end
... где-то еще в другом классе...
- (void) someMethod
{
// All instances of TestClass will be notified
[[NSNotificationCenter defaultCenter]
postNotificationName:@"TestNotification"
object:self];
}
-121--1783900- Основная проблема заключается в том, что вы не знаете, в какой кодировке находятся ваши данные. Если мы полагаем, что вы правы в том, что ваш файл в конечном итоге находится в Mac OS Roman, то вам нужно сначала декодировать данные в Юникод, а затем кодировать его как iso-8859-1.
inputFile = open("input.rtf", "rb") # The b flag is just a marker in Python 2.
data = inputFile.read().decode('mac_roman')
textData = yourparsefunctionhere(data)
outputFile = open( "textbase.tab", "wb" ) # don't use file()
for k, v in textData.iteritems():
complete_line = k + '~~~~~' + v + '~~~~~' + " ENDOFTHELINE"
outputFile.write((complete_line + "\n").encode("iso-8859-1"))
outputFile.close()
Но я не удивлюсь, так как это RTF, если это кодировка Windows, так что вы можете попробовать это тоже. Я не знаю, как RTF определяет кодировку.
-121--4268504- Существуют некоторые проблемы, когда логический вектор содержит значения NA
.
Смотрите, например:
z <- c(TRUE, FALSE, NA)
sum(z) # gives you NA
table(z)["TRUE"] # gives you 1
length(z[z == TRUE]) # f3lix answer, gives you 2 (because NA indexing returns values)
Поэтому я думаю, что наиболее безопасным является использование na.rm = TRUE
:
sum(z, na.rm = TRUE) # best way to count TRUE values
(что дает 1). Думаю, что решение table
менее эффективно (посмотрите на код функции table
).
Также следует быть осторожными с решением «table», если в логическом векторе нет значений TRUE. Предположим, что z < - c (NA, FALSE, NA)
или просто z < - c (FALSE, FALSE)
, то таблица (z) [«TRUE»]
дает вам NA
для обоих случаев.
Другой способ -
> length(z[z==TRUE])
[1] 498
Хотя sum (z)
красивый и короткий, для меня length (z [z == ИСТИНА])
более понятен. Хотя я думаю, что с такой простой задачей, как эта, на самом деле это не имеет значения ...
Если это большой вектор, вы, вероятно, должны выбрать самое быстрое решение, которым является sum (z)
. length (z [z == TRUE])
примерно в 10 раз медленнее, а table (z) [TRUE]
примерно в 200 раз медленнее, чем sum (z)
.
Подводя итог, можно сказать, что sum (z)
является самым быстрым для ввода и выполнения.
Другим вариантом, который не был упомянут, является использование , который
:
length(which(z))
просто для фактического обеспечения некоторого контекста на «который является быстрее вопросов», Всегда проще всего просто проверить себя. Я сделал вектор намного больше для сравнения:
z <- sample(c(TRUE,FALSE),1000000,rep=TRUE)
system.time(sum(z))
user system elapsed
0.03 0.00 0.03
system.time(length(z[z==TRUE]))
user system elapsed
0.75 0.07 0.83
system.time(length(which(z)))
user system elapsed
1.34 0.28 1.64
system.time(table(z)["TRUE"])
user system elapsed
10.62 0.52 11.19
так четко с использованием SUM
- лучший подход в этом случае. Вы также можете захотеть проверить ценности
, как предложил Марек.
Просто добавить примечание, касающуюся значений Na и функцию , в котором
функция:
> which(c(T, F, NA, NULL, T, F))
[1] 1 4
> which(!c(T, F, NA, NULL, T, F))
[1] 2 5
Обратите внимание, что только проверяет логику True
так
Вот как вы преобразуете числа в последовательности и соединяете последовательности с другими вещами (это странно):
>> ['the number is ' num2str(15) '.']
ans =
the number is 15.
-121--2774022- Это не builtin, но альтернатива я предпочитаю использовать классы типов, чтобы обобщить Булевы операции предикатам любой арности:
module Pred2 where
class Predicate a where
complement :: a -> a
disjoin :: a -> a -> a
conjoin :: a -> a -> a
instance Predicate Bool where
complement = not
disjoin = (||)
conjoin = (&&)
instance (Predicate b) => Predicate (a -> b) where
complement = (complement .)
disjoin f g x = f x `disjoin` g x
conjoin f g x = f x `conjoin` g x
-- examples:
ge :: Ord a => a -> a -> Bool
ge = complement (<)
pos = (>0)
nonzero = pos `disjoin` (pos . negate)
zero = complement pos `conjoin` complement (pos . negate)
Я люблю Хаскелла!
-121--3572375- который
является хорошей альтернативой, особенно при работе с матрицами (проверьте ? какой
и обратите внимание на аргумент arr.ind
). Но я предлагаю придерживаться sum
из-за na.rm
аргумента, который может обрабатывать NA
в логическом векторе.
Например:
# create dummy variable
set.seed(100)
x <- round(runif(100, 0, 1))
x <- x == 1
# create NA's
x[seq(1, length(x), 7)] <- NA
Если ввести sum (x)
, вы получите NA
в результате, но если вы передадите na.rm = TRUE
в функции sum
, вы получите нужный результат.
> sum(x)
[1] NA
> sum(x, na.rm=TRUE)
[1] 43
Является ли ваш вопрос строго теоретическим или у вас есть некоторые практические проблемы, касающиеся логических векторов?
В AspxTextBox можно задать свойство ClureInstureName.
<dxe:ASPxTextBox ID="InstrumentQuantity"
runat="server" Width="170px"
ClientInstanceName="MyTextBox">
</dxe:ASPxTextBox>
CleySide:
function DoSomething()
{
var theText = MyTextBox.GetValue(); //GetValue() is the DevExpress clientside function
MyTextBox.SetValue('this is the value i want to use'); //Sets the text
}
Документация devexpress содержит довольно хорошую информацию о скриптах на стороне клиента. Перейдите по ссылке , щелкните Ссылку, затем выберите в меню DevExpress.Web.ASPxEditors.Script.
-121--4780109-Я не писал это, но это было внесено @ amitrathore в Twitter :
(defn kv [bag [k v]]
(update-in bag [k] conj v))
(defn mergeMatches [propertyMapList]
(reduce #(reduce kv %1 %2) {} propertyMapList))
-121--3502261- Я делал нечто подобное несколько недель назад. Вот возможное решение, оно написано с нуля, так что это своего рода бета-релиз или что-то подобное. Я постараюсь улучшить его, удалив циклы из кода...
Основная идея состоит в том, чтобы написать функцию, которая будет принимать 2 (или 3) аргументы. Первый - это data.frame
, в котором хранятся данные, собранные из вопросника, а второй - числовой вектор с правильными ответами (это применимо только для вопросника с одним выбором). Можно также добавить третий аргумент, возвращающий числовой вектор с окончательным результатом, или data.frame со встроенным результатом.
fscore <- function(x, sol, output = 'numeric') {
if (ncol(x) != length(sol)) {
stop('Number of items differs from length of correct answers!')
} else {
inc <- matrix(ncol=ncol(x), nrow=nrow(x))
for (i in 1:ncol(x)) {
inc[,i] <- x[,i] == sol[i]
}
if (output == 'numeric') {
res <- rowSums(inc)
} else if (output == 'data.frame') {
res <- data.frame(x, result = rowSums(inc))
} else {
stop('Type not supported!')
}
}
return(res)
}
Я постараюсь сделать это более элегантным способом с некоторой функцией * слоя. Обратите внимание, что я не ставил na.rm
аргумент... Сделает это
# create dummy data frame - values from 1 to 5
set.seed(100)
d <- as.data.frame(matrix(round(runif(200,1,5)), 10))
# create solution vector
sol <- round(runif(20, 1, 5))
Теперь примените функцию:
> fscore(d, sol)
[1] 6 4 2 4 4 3 3 6 2 6
Если передать аргумент data.frame, он вернет измененный data.frame. Я постараюсь исправить это... Надеюсь, это поможет!