2015-11-21 2 views
2

Пример данныхСоздание списка одного уровня с lapply/sapply без принуждения

> library(data.table) 
> x <- c(as.IDate("2012-01-01"), as.IDate("2012-01-02")) 
> x 
[1] "2012-01-01" "2012-01-02" 
> class(x) 
[1] "IDate" "Date" 

Я хотел бы выполнить функцию через vector, и поместить результат в одном уровне list. Вот идеальный результат:

> y <- list(x = c(as.IDate("2012-01-01"), as.IDate("2012-01-02"))) 
> y 
$x 
[1] "2012-01-01" "2012-01-02" 

> class(y) 
[1] "list" 
> class(y$x) 
[1] "IDate" "Date" 

Я пробовал эти решения, но lapply любит строить многоуровневые list с, и sapply любит, чтобы заставить мой IDate к integer.

> list(x = lapply(x, function(x) x)) 
$x 
$x[[1]] 
[1] "2012-01-01" 

$x[[2]] 
[1] "2012-01-02" 

> list(x = sapply(x, function(x) x)) 
$x 
[1] 15340 15341 

Обратите внимание, что function(x) просто заполнитель, я хочу, чтобы продемонстрировать, что это sapply является то, что делает принуждение, а не функция.

Как я могу обойти это?

+1

Не понятно, почему вам нужно сделать, это 'список (х = х)' кажется, чтобы получить требуемую мощность. – akrun

+0

@arkun Существует функция, которую мне нужно пробежать по вектору, поэтому я использую 'sapply' /' lapply'. Я не выписал фактическую функцию, потому что хотел продемонстрировать, что сама функция не выполняла принуждение. – Chris

+1

Попробуйте использовать 'lapply (list (x), function (x) ...)' – akrun

ответ

2

Мы можем использовать

lapply(list(x), yourfunction) 
Смежные вопросы