Я использую в 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"
lapply
и семья делают цикл из-за линий data.frame.
не имеет смысл использовать это, чтобы применять колонну к колонне. Чтобы получать то, что ты хочешь, ты можешь делать:
setNames(as.list(names(data)), names(data))
Функция 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]
, у которого да есть имя.