2017-02-16 13 views
1

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

colors = (
    "#D53E4F" "#FC8D59" "#FEE08B" 
    "#FFFFBF" "#E6F598" "#99D594" "#3288BD" 
) 
n = 6277 
wxData = data.frame(
    x = numeric(n - 1), 
    y = numeric(n - 1), 
    z = numeric(n - 1), 
    c = character(n - 1), 
    stringsAsFactors = FALSE 
) 
for (j in 1 : n-1) { 
    wxData$x[j]  = xCoord[[1]][j] #"data.frame" 
    wxData$y[j]  = yCoord[[1]][j] #"data.frame" 
    wxData$z[j]  = dbz[[1]][j]  #"data.frame" 
    colorIndx  = which(wxData$z[j] == colorRanges) 
    wxData$c[j] = colors[colorIndx] 
} 

Извинения, если это Раньше меня спрашивали, но я посмотрел.

+0

Может вам описать словами, что делает ваш код? Это гораздо более элегантный и быстрый способ общения, чем без комментируемого кода ... И, может быть, дать определения для объектов, которые вы не определяете, 'xCoord',' yCoord', 'dbz',' colorRanges'? – Gregor

+0

Я также смущен тем, почему вы устанавливаете 'n = 6277', но тогда только когда-либо кажется, что используется' n - 1' ... почему бы не 'n = 6276'? Я думаю, что ответ на ваш вопрос - «матч». – Gregor

+0

'for (j in 1: n-1)' делает 'for (j in (1: n) - 1)', а не 'for (j in 1: (n-1))'. Это ваше намерение? – nrussell

ответ

1

В целом, учитывая при условии, код не является исполняемым, петля над

which(values[j] == array) 

может быть замещен одной строкой без петли

match(values, array) 

Например:

values = c('a','a','b','c','b','a') 
array = c('a','b','c') 
match(values, array) 

# 1 1 2 3 2 1 
+0

Большое спасибо. –

+0

Добро пожаловать. Я большой поклонник функции 'match'. –