Цикл по строковым переменным в R

List<String> myStringList = new List<string>();
foreach (string s in myStringArray)
{
    if (!myStringList.Contains(s))
    {
        myStringList.Add(s);
    }
}

Это O (n^2) , который не будет иметь значения для короткого списка, который будет наполненным в комбинацию, но мог быть быстро быть проблемой на большом наборе.

13
задан Metrics 25 August 2013 в 16:56
поделиться

4 ответа

Как предполагали другие, это было бы проще, если бы у вас был фрейм данных со столбцами с именем nominalprice и realprice . Если вы этого не сделаете, вы всегда можете использовать get . Здесь вам вообще не понадобится parse .

clist <- c("nominalprice", "realprice")
for (i in clist) {
   png(paste("c:/TimePlot-",i,".png"), sep="")
   plot(time, get(i))
   dev.off() 
}
18
ответ дан 1 December 2019 в 22:23
поделиться

Использование ggplot2 и reshape:

library(ggplot2)
library(reshape)
df <- data.frame(nominalprice=rexp(10), time=1:10)
df <- transform(df, realprice=nominalprice*runif(10,.9,1.1))
dfm <- melt(df, id.var=c("time"))
qplot(time, value, facets=~variable, data=dfm)
1
ответ дан 1 December 2019 в 22:23
поделиться

Я не вижу, что особенно не так с вашим исходным решением, за исключением того, что я не знаю, почему вы используете функцию eval (). Мне это не кажется необходимым.

Вы также можете использовать функцию apply, например lapply. Вот рабочий пример. Я создал фиктивные данные как временные ряды zoo () (это необязательно, но поскольку вы все равно работаете с данными временных рядов):

# x <- some time series data
time <- as.Date("2003-02-01") + c(1, 3, 7, 9, 14) - 1
x <- zoo(data.frame(nominalprice=rnorm(5),realprice=rnorm(5)), time)
lapply(c("nominalprice", "realprice"), function(c.name, x) { 
  png(paste("c:/TimePlot-", c.name, ".png", sep=""))
  plot(x[,c.name], main=c.name)
  dev.off()
}, x=x)
1
ответ дан 1 December 2019 в 22:23
поделиться

Если ваша основная проблема заключается в необходимости набирать eval (parse (text = i)) вместо «i», вы можете создать более простые в использовании функции для вычисления выражений из строки:

e = function(expr) eval(parse(text=expr))

Тогда пример R можно упростить до:

clist <- c("nominalprice", "realprice")
for (i in clist) {
  png(paste("c:/TimePlot-", i, ".png", sep=""))
  plot(time, e(i))
  dev.off() 
}
2
ответ дан 1 December 2019 в 22:23
поделиться
Другие вопросы по тегам:

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