Как я могу включать имя переменной в вызов функции в R?

Я пытаюсь изменить имя переменной, которая включена в для цикла и вызова функции. В примере ниже, я хотел бы, чтобы column_1 был передан функции построения графика, затем column_2 и т.д. Я попытался использовать do.call, но он возвращает "объект 'column_j' не найденный". Но объект column_j там, и работы функции построения графика если я твердый код их в. Помогите многому ценившему.

for (j in 2:12) {
    column_to_plot = paste("column_", j, sep = "")
    do.call("plot", list(x, as.name(column_to_plot)))
}
5
задан John 23 February 2010 в 08:17
поделиться

4 ответа

Я делаю:

x <- runif(100)
column_2 <-
    column_3 <-
    column_4 <-
    column_5 <-
    column_6 <-
    column_7 <-
    column_8 <-
    column_9 <-
    column_10 <-
    column_11 <-
    column_12 <- rnorm(100)

for (j in 2:12) {
    column_to_plot = paste("column_", j, sep = "")
    do.call("plot", list(x, as.name(column_to_plot)))
}

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

(Я знаю, что могу сгенерировать векторы с помощью цикла и assign , но я хочу привести наглядный пример)

6
ответ дан 13 December 2019 в 19:26
поделиться

Вы пытаетесь получить объект в рабочей области с помощью строки символов? В этом случае может помочь parse ():

for (j in 2:12) {
    column_to_plot = paste("column_", j, sep = "")
    plot(x, eval(parse(text=column_to_plot)))
}

В этом случае вы можете использовать do.call (), но это не обязательно.

Изменить: обернуть parse () в eval ()

2
ответ дан 13 December 2019 в 19:26
поделиться

Вот один из способов сделать это:

tmp.df <- data.frame(col_1=rnorm(10),col_2=rnorm(10),col_3=rnorm(10))
x <- seq(2,20,by=2)
plot(x, tmp.df$col_1)
for(j in 2:3){
  name.list <- list("x",paste("col_",j,sep=""))
  with(tmp.df, do.call("lines",lapply(name.list,as.name))) }

Вы также можете сделать colnames(tmp.df)[j] вместо paste(...), если хотите.

1
ответ дан 13 December 2019 в 19:26
поделиться

Вы можете сделать это без команды paste () в вашем цикле for . Просто назначьте столбцы с помощью функции colnames () в вашем цикле:

column_to_plot <- colnames(dataframeNAME)[j]

Надеюсь, что это поможет в качестве первого кладжа.

2
ответ дан 13 December 2019 в 19:26
поделиться
Другие вопросы по тегам:

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