Подтвердить что ты не робот

Почему "предпочтительнее" в R

От help("'"):

Одиночные и двойные кавычки ограничивают символьные константы. Они могут использоваться предпочтительны двойные кавычки (и характер константы печатаются с использованием двойных кавычек), поэтому одинарные кавычки обычно используется только для разграничения символьных констант, содержащих двойные котировки.

Если они взаимозаменяемы, почему предпочтительны двойные кавычки? Мне еще предстоит найти разницу между ними в моем собственном использовании. Особенно удивительно, что векторы смешанного характера допустимы:

> c("a",'b',"c")
[1] "a" "b" "c"

Edit

Я действительно задаю здесь два вопроса, я думаю:

  • Существуют ли ситуации, в которых ' и " ведут себя по-другому?
  • Если нет, то почему " выбран в качестве предпочтительной версии по соглашению?

Ответы до сих пор были связаны с (2), но (1), по крайней мере, такой же большой интерес.

4b9b3361

Ответ 1

Я не знаю ни одного случая, когда одиночные кавычки отличаются от двойников. Я думаю, что предпочтение связано с читабельностью и во избежание возможной путаницы одиночных кавычек с обратными тиками, которые обрабатываются по-разному. Вероятно, очень сложно для системы глазного мозга в wetware подобрать несоответствующий back-tick в паре с одной цитатой.

> `newfn` <- function() {}
> newfn
function() {}
> "newfn" <- function() {}
> newfn
function() {}
> 'newfn' <- function() {}
> newfn
function() {}
> var <- c(`a`, "b", 'c')
Error: object 'a' not found
> var <- c( "b", 'c')
> var
[1] "b" "c"
> a <- 1
> identical(`a`, a)
[1] TRUE

Таким образом, для присвоения имен они (s-кавычки, d-кавычки и обратные тики) обрабатываются одинаково на LHS назначения из function, но неуказанные a и обратные метки a совпадают в командной строке и отличаются от любого из указанных "a" или "a".

Другая ситуация, когда может быть разница, заключается в вводе данных. Имена людей могут иметь одинарные кавычки, и это не значит, что вы можете просмотреть обработку двух разных видов кавычек с помощью функции read.table. По умолчанию он использует оба типа кавычек, но может потребоваться "отключить" действие кавычек одинарных кавычек, установив quote="\"", чтобы по ошибке не получить большие капли данных, превращенные в одно текстовое поле. Функция count.fields имеет те же значения по умолчанию, что и read.table, поэтому имеет смысл сделать предварительный прогон с этим, чтобы проверить, что укороченные строки вызывают несогласованные одинарные кавычки:

 table( count.fields('filnam.ext') )

Ответ 2

Моя догадка заключается в том, что "одиночные кавычки" встречаются гораздо чаще как апострофы, поэтому предпочтение двойным кавычкам уменьшит вероятность того, что все испортится с апострофом.

Ответ 3

Относительно первого вопроса: Существуют ли ситуации, в которых "и" ведут себя по-другому? Я думаю, важно отметить, что поскольку

identical("a", 'a')
TRUE
Пользователи

R (в том числе разработчики пакетов) не могут сказать разницу, следовательно, не могут создавать разные типы поведения для одного или другого.

Ответ 4

Чтобы избежать путаницы для тех, кто привык к программированию в C языков (C, С++, Java), где есть разница в значение одинарных кавычек и двойных кавычек. Программист С читает "а" как один символ и "а" как символ строка, состоящая из буквы "a", за которой следует нулевой символ, завершите строку. В R нет символьного типа данных, есть только символьные строки. Для обеспечения совместимости с другими языками это помогает если символьные строки ограничены двойными кавычками. Одиночная цитата версия в R для удобства. На большинстве клавиатур вам не нужно используйте клавишу shift для ввода одной кавычки, но вам нужен сдвиг для двойная кавычка.