Я могу корректно включать, отформатировал строки SQL в сценарии R?

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

В контексте этого конкретного вопроса, лучше здесь означает "быстрее". Который не очень полезен.

Взгляды о скорости могут быть серьезной ошибкой. Существуют глубокие ошибочные последствия в определенной алгебраической форме вычисления.

См. арифметика С плавающей точкой с анализом ошибок . См. Важные вопросы в Арифметике С плавающей точкой и Анализе ошибок .

, В то время как некоторые значения с плавающей точкой точны, большинство значений с плавающей точкой является приближением; они - некоторое идеальное значение плюс некоторая ошибка. Каждая операция относится к идеальному значению и ошибочному значению.

самые большие проблемы возникают из попытки управлять двумя почти-равными-количествами. Самые правые биты (биты ошибки) прибывают для доминирования над результатами.

>>> for i in range(7):
...     a=1/(10.0**i)
...     b=(1/10.0)**i
...     print i, a, b, a-b
... 
0 1.0 1.0 0.0
1 0.1 0.1 0.0
2 0.01 0.01 -1.73472347598e-18
3 0.001 0.001 -2.16840434497e-19
4 0.0001 0.0001 -1.35525271561e-20
5 1e-05 1e-05 -1.69406589451e-21
6 1e-06 1e-06 -4.23516473627e-22

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

8
задан PaulHurleyuk 25 February 2010 в 12:16
поделиться

4 ответа

вы можете переопределить оператор% +%, чтобы улучшить синтаксис конкатенации строк:

'%+%' <- function(x,y) paste(x,y,sep="")

y<-"y1"
x<-"somethingorother"
query<-
'SELECT DISTINCT x AS ' %+% x %+%',\n'    %+%
'                y AS ' %+% y %+% '\n'    %+%
' FROM tbl
 WHERE id=%s
 AND num=%d'

cat(query,"\n")

дает:

> cat(query,"\n")
SELECT DISTINCT x AS somethingorother,
                y AS y1
 FROM tbl
 WHERE id=%s
 AND num=%d 
8
ответ дан 5 December 2019 в 05:19
поделиться

Если вы старый программист на C, как и я, вам может понравиться просто использовать sprintf ().

Заимствуя пример Яна:

y<-"y1"
x<-"somethingorother"
query <- sprintf(
'SELECT DISTINCT x AS %s,
                 y AS %s,
 FROM tbl
 WHERE id=%%s
 AND num=%%d', x, y)

дает:

> cat(query,"\n")
SELECT DISTINCT x AS somethingorother,
                 y AS y1,
 FROM tbl
 WHERE id=%s
 AND num=%d 
13
ответ дан 5 December 2019 в 05:19
поделиться

I ' d рекомендует просто использовать простую строку, а не встраивать в нее значения переменных. Вместо этого используйте заполнители.

sql <- "SELECT foo FROM bar
    WHERE col1 = ?
    AND col2 = ?
    ORDER BY yomama"

Я не уверен, что двойные кавычки - лучший способ встраивать многострочные строки в код R (есть ли что-то вроде here-docs?), Но это работает, в отличие от Java.

По какой-то причине вы не хотите отправлять "\ n" или "\ t" в свою базу данных? Они должны быть в порядке в SQL.

в вашу базу данных? Они должны быть в порядке в SQL.

в вашу базу данных? Они должны быть в порядке в SQL.

3
ответ дан 5 December 2019 в 05:19
поделиться

Я просто попал в строку sql с помощью sql <- gsub ("\ n", "", sql) и sql <- gsub ("\ t", "", sql) перед его запуском. Сама строка может быть любой длины, но не содержит разметки конкатенации.

1
ответ дан 5 December 2019 в 05:19
поделиться
Другие вопросы по тегам:

Похожие вопросы: