Возвращать имя изменчивой только одной из-за повторения в R

Я использую в R lapply () с функцией и, вместо того, чтобы получать имя переменной, соответствующей каждому повторению, я получаю все имена переменных в каждом повторении. С

colnames(data) <- c("var1", "var2")

varnames <- function(var, name){
   return(name)
 }

print(lapply(data, varnames, name=names(data)))

Выход, который я получаю:

$var1
[1] "var1" "var2"

$var2
[1] "var1" "var2"

Взамен, я хотел бы получить:

$var1
[1] "var1"

$var2
[1] "var2"
1
задан 24.10.2016, 15:16
2 ответа

lapply и семья делают цикл из-за линий data.frame.

не имеет смысл использовать это, чтобы применять колонну к колонне. Чтобы получать то, что ты хочешь, ты можешь делать:

setNames(as.list(names(data)), names(data))

1
ответ дан 24.11.2019, 12:57

Функция varnames, который ты определил, просит аргументы var и name, и возврати стоимость name.

varnames <- function(var, name){
   return(name)
 }

lapply примени функцию к каждому элементу списка. В случае data.frame, Ваши элементы - колонны, как описано в документации семьи apply в R.

Со следующим ты просишь применять функцию varnames к элементам даты. Для каждого приложения функции, ты устанавливаешь, что аргумент ямс равен в names(data).

lapply(data, varnames, name = names(data)

По этой причине, скроллировали функцию, он возвращает тебе стоимость names(data), так как это - то, что ты попросил у него.

Чтобы получать результат, который ты ждешь, используя lapply, ты можешь использовать следующее.

lapply(1:length(data), function(x){
  names(data[x])
})

Porqué не lapply(data, names)?

Потому что тогда lapply примени ямс к каждому элементу data. В этом примере, это data[[1]] и data[[2]], у которых нет свойства name.

Это отличается, чтобы применять ямс в data[1] и data[1], у которого да есть имя.

0
ответ дан 24.11.2019, 12:57