#r
#r
Вопрос:
Я хотел бы переименовать имена моих вложенных списков на одно и то же имя без изменения базовых данных.
Вот мой пример списка:
#Create dataframes ABC.123 and ABC.987, where 'left' and 'right' columns are numeric and the 'up' column contains characters
ABC.123 <- cbind.data.frame(left = c(2, 3, 5), right = c(5, 8, 4) , up = c("aa","aa", "aa"))
ABC.123$up <- as.character(ABC.123$up)
ABC.987 <- cbind.data.frame(left = c(7, 2, 9), right = c(3, 6, 1) , up = c("bb","bb", "bb"))
ABC.987$up <- as.character(ABC.987$up)
#Create a list called mylist, containing two dataframes: ABC.123 and ABC.987
mylist <- list(ABC.123 = ABC.123, ABC.987 = ABC.987)
$ABC.123
# left right up
#1 2 5 aa
#2 3 8 aa
#3 5 4 aa
$ABC.987
# left right up
#1 7 3 bb
#2 2 6 bb
#3 9 1 bb
Я бы хотел, чтобы мой вывод выглядел так:
perfect.list
$ABC
# left right up
#1 2 5 aa
#2 3 8 aa
#3 5 4 aa
$ABC
# left right up
#1 7 3 bb
#2 2 6 bb
#3 9 1 bb
И при простом изменении имени базовые данные изменяются, и я пытаюсь избежать этого, что я вижу, когда нажимаю на mylist в окне среды RStudio:
names(mylist) <- c("ABC", "ABC")
mylist
$ABC
# left right up
#1 2 5 aa
#2 3 8 aa
#3 5 4 aa
$ABC
# left right up
#1 2 5 aa
#2 3 8 aa
#3 5 4 aa
Я могу получить идеальный результат.mylist, если применю изменение имени и введу «mylist» непосредственно в окне консоли, но опять же, если я нажму на mylist в среде RStudio, он покажет перезаписанные данные. Итак, я запрашиваю ошибку, и я не знаю, какая из них правильная.
В конечном итоге я собираюсь сделать.call(rbind) вложенные списки с тем же именем, если это поможет ответить на вопрос, почему я это делаю. Если я запрашиваю ошибку, есть ли лучший способ объединить мои вложенные списки?
Комментарии:
1. Вы дважды проверяли в новом сеансе R? Просто запуск
names(mylist) <- c("ABC", "ABC")
отлично работает для меня и не изменяет данные.2. @joran, да, я только что полностью перезапустил RStudio. Когда я повторно запустил код из моего примера, я нажимаю на mylist в глобальной среде, я вижу неправильно перезаписанный список в соответствии с моим примером выше. Но когда я набираю «mylist» в окне консоли, он возвращает правильное переименование. Итак, какой из них правильный, и почему они не показывают одинаковые результаты?
3. Хорошо, единственное место, где я вижу неправильное поведение, — это если я нажимаю на объект на панели среды, которая затем открывает новую вкладку на панели редактора сценариев, и если я нажимаю на отдельные элементы там , я вижу, что отображаются неправильные данные. Это, безусловно, просто ошибка пользовательского интерфейса в RStudio.
4. Консоль верна. Объект — это то, что вы хотите. Это проблема с пользовательским интерфейсом RStudio. У нас нет возможности «исправить» это; вы можете сообщить им об этом как об ошибке.
5. На самом деле это известная старая ошибка в RStudio: github.com/rstudio/rstudio/issues/2966 . Что вы должны делать? Вы можете удалить его, если считаете, что это никому не поможет, но я думаю, что его следует сохранить. Таким образом, вы могли бы написать ответ, указывающий на этот отчет об ошибке, или, если кто-то другой это сделает, вы можете принять их ответ.
Ответ №1:
Согласно комментариям @user2554330 и @joran, то, что я пытаюсь выполнить в своем вопросе, вызывает хорошо известную, хорошо документированную ошибку в RStudio: https://github.com/rstudio/rstudio/issues/2966 .
В этом случае доверяйте выводам консоли, которые точно отражают любые манипуляции с объектами данных. И просто знайте, что то, что вы видите на панели среды RStudio, не является точным представлением ваших объектов данных.
И в целом, старайтесь избегать запроса ошибки в первую очередь, НЕ переименовывая свои списки или вложенные списки в неуникальный / дублирующий идентификатор.