Добавление аргумента к математической функции

Я пытаюсь автоматизировать процесс создания интерполированных геохимических карт. Я создал цикл, который по существу начинается в столбце № 13 и продолжается до № 67.

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

Например; заголовок столбца № 13 - «Ag_ppm», поэтому исходный код читается так:

    LogSr.idw = idw(log10("Ag_ppm") ~ 1 , locations=NGSA.SPDF, newdata=NGSA.grid,
                   maxdist=15000, nmin=4)

Мне удалось получить заголовок интересующего столбца в каждом цикле, используя (где i увеличивается на 1 каждый цикл; 13, 14, 15 и т. Д.):

    coln <- colnames(NGSA.df[i])

Однако, когда я просто заменяю "Ag_ppm" на coln, линия выходит из строя с заданной ошибкой. Я пробовал разные подходы, включая вставку, хотя все по-прежнему приводит к той же ошибке.

    LogSr.idw = idw(log10(coln) ~ 1, locations=NGSA.SPDF, newdata=NGSA.grid,
                    maxdist=15000, nmin=4) 

Ошибка в log10 (coln): нечисловой аргумент математической функции

Есть ли достаточно простой подход с использованием текущего метода?


person M. Aberle    schedule 03.05.2016    source источник
comment
Одно: используйте вместо этого colnames(NGSA.df)[i]. Ваша версия без необходимости копирует весь столбец данных, тогда как вам нужно только имя переменной. Пожалуйста, укажите имя пакета, который вы используете, так как idw не является базовой функцией R.   -  person lmo    schedule 03.05.2016
comment
Для этой строки кода используется пакет gstat.   -  person M. Aberle    schedule 03.05.2016
comment
Должен признаться, я удивлен, что log10("Ag_ppm") не вызывает ту же ошибку. Попробуйте обернуть coln в get: log10(get(coln)).   -  person lmo    schedule 03.05.2016
comment
@lmo, это сработало, спасибо.   -  person M. Aberle    schedule 03.05.2016
comment
Теперь рабочий код: LogSr.idw= idw(log10(get(coln))~1,locations=NGSA.SPDF,newdata=NGSA.grid, maxdist=15000,nmin=4)   -  person M. Aberle    schedule 03.05.2016


Ответы (1)


Меня удивляет, что log10("Ag_ppm") не вызывает ту же ошибку, но я часто преодолевал эту проблему, используя get:

LogSr.idw = idw(log10(get(coln)) ~ 1, locations=NGSA.SPDF, newdata=NGSA.grid,
                maxdist=15000, nmin=4)

В большинстве ситуаций рекомендуется подумать об альтернативе использованию get, но из-за формулы (~) здесь и использования аргументов newdata get может быть лучшим решением.

person lmo    schedule 03.05.2016