Аннотация.
У меня проблемы с пониманием кода
поднабор списков. Я применяю индекс к списку.
Проблема в том, что когда я применяю индекс к списку внутри
пользовательская функция, список ведет себя как таблица, возвращая
только первый столбец, но для каждой строки (всего 4 строки).
Если я применяю тот же индекс к тому же списку за пределами этого
пользовательская функция, вывод является только первым элементом
список, отображающий оба элемента вектора символов
в первом элементе списка. Мне нужно знать, почему существует
разница в выходах.
Как я пытался решить мою проблему самостоятельно?
Я выполнил поиск в Google по следующему поисковому запросу:
[Списки индексации в R] (Списки индексации https://stackoverflow.com/questions/tagged/r).
Самая близкая статья была такой: Как правильно использовать списки в R .
Но он не смог ответить на мой вопрос.
Введение.
Я цитирую код, который я использую, прежде чем сформулировать свой вопрос
потому что это слишком запутанный вопрос, чтобы объяснить в абсолютном
аннотация.
В нижеследующем, есть четыре инструкции, которые студенты говорят
следить. Каждый из них перечислен.
# Instruction 1:
# Create a character vector containing the names of the top four
# mathematicians that contributed to the field of statistics and
# list their birth years, with the name and year separated by a
# colon.
mathematicians <- c("GAUSS:1777", "BAYES:1702", "PASCAL:1623", "PEARSON:1857")
# The above code creates a character vector with four elements.
# Instruction 2: Next, use the strsplit() function to split the person's
# last name from his birth year.
split_name_and_year_born <- strsplit(mathematicians, split = ":")
# The variable split_name_and_year_born must be a list because
# strsplit only returns lists (according to the documentation).
# Instruction 3: Write a function that accepts a list or vector
# object and returns only the first element of that object.
first <- function(x) {
x[1]
}
# This is a fairly straightforward function. If x is a list then
# x[1] should be the first element of that list. The same is true
# for vectors.
# Instruction 4: apply the first function to the list split_name_and_year_born
lapply(split_name_and_year_born, first)
# [[1]]
# [1] "GAUSS"
#
# [[2]]
# [1] "BAYES"
#
# [[3]]
# [1] "PASCAL"
#
# [[4]]
# [1] "PEARSON"
Мой комментарий: если вы рассмотрите split_name_and_year_born
как список векторов, длина = 2, мы можем представить, что список ведет себя как таблица, где первый элемент - это первый столбец в таблице. Такая интерпретация приведенного выше кода имеет смысл с учетом результатов. Однако, если я введу следующую строку кода, я получу только первый элемент списка.
split_name_and_year_born[1]
[[1]]
[1] "GAUSS" "1777"
Мой вопрос: почему разница в выводе? Я использую ту же структуру данных, с теми же данными. Я применяю оператор индексирования только в разных местах. Почему разница в результатах? Функция должна делать что-то неявное. Я просто не знаю что.