Функция base reshape
работает отлично:
df <- data.frame(
year = c(rep(2000, 12), rep(2001, 12)),
month = rep(1:12, 2),
values = rnorm(24)
)
df_wide <- reshape(df, idvar="year", timevar="month", v.names="values", direction="wide", sep="_")
df_wide
Здесь idvar
- столбец классов, который разделяет строки, timevar
- столбец классов, который должен быть широко представлен, v.names
- это столбец, содержащий числовые значения, direction
указывает широкий или длинный формат, а необязательный аргумент sep
- это разделитель, используемый между именами классов timevar
и v.names
на выходе data.frame
. Если нет idvar
, создайте его перед использованием функции reshape()
:
df$id <- c(rep("year1", 12), rep("year2", 12))
df_wide <- reshape(df, idvar="id", timevar="month", v.names="values", direction="wide", sep="_")
df_wide
Просто помните, что требуется idvar
! Часть timevar
и v.names
проста. Выход этой функции более предсказуем, чем некоторые другие, поскольку все явно определено.
synchronized
работают на уровне экземпляра. Каждый экземпляр класса получает свой собственный замок. Блокировка приобретается каждый раз, когда вводится любой метод synchronized
экземпляра. Это предотвращает вызов нескольких потоков, вызывающих synchronized
методы в том же экземпляре (обратите внимание, что это также предотвращает вызов разных методов synchronized
в одном экземпляре).
Теперь, поскольку у вас есть два экземпляра вашего класса, каждый экземпляр получает свою собственную блокировку. Нет ничего, чтобы предотвратить одновременное использование обоих потоков в своем экземпляре одновременно.
Если вы хотите предотвратить это, вы можете иметь блок synchronized(obj)
внутри run()
, где obj
будет объект, общий для обоих экземпляров вашего класса:
class MyThread2 implements Runnable {
private static final Object lock = new Object();
...
public void run() {
synchronized(lock) {
...
}
}
}
synchronized
? – Sajad 16 February 2014 в 00:04static
vs nonstatic
, используя блокиsynchronized
с разными замками и т. д. Если вам нужна дополнительная информация, отправьте новый вопрос. – NPE 16 February 2014 в 00:06