2015-06-01 2 views
0

Я пытаюсь определить переменную в цикле в г, используя функцию вставки, пример выглядит следующим образом:Определение переменной в цикле, используя пасту в г с SQLQuery

for (i in 1:length(XX)) { 
    (paste0("Test",Name[i],sep="")) <- sqlQuery(channel, paste("SampleQuery", sep = "")) 
} 

Я получаю следующая ошибка:

Error in (paste0("Test", Name[i], sep = "")) <- sqlQuery(channel, : 
target of assignment expands to non-language object 

Спасибо за любую помощь!

ответ

1

Из документации вывод paste0 является символьным вектором, а не переменной. Вы не можете использовать вектор символов и оператор <- для назначения в переменную, для этого вам нужно assign().

Но в любом случае вам будет лучше хранить список связанных SQL-результатов в фактическом list, а не в кучу переменных. Сохраняет среду более аккуратную и более легкую для доступа к программному обеспечению после этого.

+0

Кроме того, похоже, что вы собираете кучу одинаковых результатов, потому что ничего о 'sqlQuery (channel, paste (" SampleQuery ", sep =" ")) 'меняется между итерациями вашего цикла, как вы его написали. Но ваш вопрос касался главным образом назначения в переменной, поэтому я ограничил ответ на этот вопрос – arvi1000

+0

Из-за моего желаемого вывода отдельных CSV-файлов и переменных, хранящихся в рабочей области, я применил assign(), аналогичный следующему коду: –

+0

: for (i в 1: длина (XX)) { для (j в 1: длина (YY)) { Varname <- paste ("Test", XX [i], "_", YY [j], sep = " ") assign (Varname, sqlQuery (канал," SampleQuery ", sep =" "))) write.csv ((sqlQuery (канал," SampleQuery ", sep =" "))), paste (Varname,". csv ", sep =" "), row.names = FALSE) } } Я знаю, что это может быть не самым эффективным, но в настоящее время работает для моей ситуации. (мой «SampleQuery» содержит переменную с [i] и [j]) –