Связанные: Строки как ссылки переменных в R
Возможно, связано: Объединить выражения для подмножества блока данных
Я упростил вопрос в запросе комментария. Здесь приведены некоторые примеры данных.
dat <- data.frame(num=1:10,sq=(1:10)^2,cu=(1:10)^3)
set1 <- subset(dat,num>5)
set2 <- subset(dat,num<=5)
Теперь я хотел бы сделать из них пузыри. У меня более сложный набор данных с цветами 3+ и сложными подмножествами, но я делаю что-то вроде этого:
symbols(set1$sq,set1$cu,circles=set1$num,bg="red")
symbols(set2$sq,set2$cu,circles=set2$num,bg="blue",add=T)
Я хотел бы сделать цикл for следующим образом:
colors <- c("red","blue")
sets <- c("set1","set2")
vars <- c("sq","cu","num")
for (i in 1:length(sets)) {
symbols(sets[[i]][,sq],sets[[i]][,cu],circles=sets[[i]][,num],
bg=colors[[i]],add=T)
}
Я знаю, что вы можете иметь переменную, чтобы определить столбец (например, var="cu"; set1[,var]
; я хочу знать, как получить переменную, чтобы указать сам файл data.frame(а другой - для оценки столбца).
Обновление: Перейдите в этот пост на r-bloggers, который имеет этот пример:
x <- 42
eval(parse(text = "x"))
[1] 42
Теперь я могу сделать что-то вроде этого:
eval(parse(text=paste(set[[1]],"$",var1,sep="")))
В этой игре мне интересно, что следующее не эквивалентно:
vars <- data.frame("var1","var2")
eval(parse(text=paste(set[[1]],"$",var1,sep="")))
eval(parse(text=paste(set[[1]],"[,vars[[1]]]",sep="")))
Мне действительно нужно это сделать:
eval(parse(text=paste(set[[1]],"[,as.character(vars[[1]])]",sep="")))
Update2: Вышеуказанное работает для вывода значений... но не при попытке построения. Я не могу:
for (i in 1:length(set)) {
symbols(eval(parse(text=paste(set[[i]],"$",var1,sep=""))),
eval(parse(text=paste(set[[i]],"$",var2,sep=""))),
circles=paste(set[[i]],".","circles",sep=""),
fg="white",bg=colors[[i]],add=T)
}
Я получаю invalid symbol coordinates
. Я проверил класс набора [[1]] и это фактор. Если я делаю is.numeric(as.numeric(set[[1]]))
, я получаю TRUE
. Даже если я добавлю это выше перед оператором eval
, я все равно получаю ошибку. Как ни странно, я могу это сделать:
set.xvars <- as.numeric(eval(parse(text=paste(set[[i]],"$",var1,sep=""))))
set.yvars <- as.numeric(eval(parse(text=paste(set[[i]],"$",var2,sep=""))))
symbols(xvars,yvars,circles=data$var3)
Почему различное поведение при сохранении в виде переменной vs. выполняется в символьной функции?