R- булево: for-l oop (вектор в векторе) - PullRequest
1 голос
/ 28 марта 2020

Я нашел этот код по одному из ответов из другого сообщения: R - Обработка нескольких значений как одной строки в одной переменной Код очень и очень полезен, но мне трудно разобраться логическое с for-l oop.

# Data
text = c("Text1", "Text2", "Text3", "Text4", "Text5")
lang = c("fr", "en", "fr,en", "sp,fr", "sp,fr,en")
d = data.frame(text, lang, stringsAsFactors = FALSE)

# Get a vector of the languages that exist
languages <- unique(unlist(strsplit(d$lang, ",")))

# Create a new column for each language
for (language in languages) d[[language]] <- grepl(language, d$lang)

# An example bar-plot
barplot(colSums(d[, -c(1, 2)]))

Мой вопрос о для (язык в языках) d [[language]] <- grepl (language, d $ lang)</strong>, который создает новые столбцы для каждого языка.

Q1) Как работает ( вектор в вектор )? Создает ли это число новых столбцов (язык) в зависимости от длины шаблона (языков)?

for(language in languages) 

Я использовал «for ()» только с цифрами c,

for ( i in (1:n))

и удивляетесь, как можно использовать вектор (вектор в векторе).

Q2) Это еще больше сбивает с толку то, как мы можем использовать несозданные языковые столбцы в качестве шаблона для prepl ()?

grepl(language, d$lang)

, поскольку языковые столбцы еще не созданы, но которые используются в качестве шаблона для функции grepl () для заполнения пустых языковых столбцов ...

Мне нужна помощь, чтобы понять эту спецификацию c строка.

1 Ответ

1 голос
/ 28 марта 2020

Если мы делаем оператор print

for(language in languages) print(language)
#[1] "fr"
#[1] "en"
#[1] "sp"

, то он возвращает каждый элемент на «языках»

. В каждом l oop он проверяет, присутствует ли подстрока в это 'lang' и создает логический вектор ИСТИНА / ЛОЖЬ из grepl, который назначается (<-) как новый столбец с тем же именем, переданным как pattern

for (language in languages) d[[language]] <- grepl(language, d$lang)

Рассмотрим mtcars набор данных

 data(mtcars)

Если мы хотим создать новый столбец

var1 <- "newvar"
mtcars[[var1]] <- 10
head(mtcars, 2)
#              mpg cyl disp  hp drat    wt  qsec vs am gear carb newvar
#Mazda RX4      21   6  160 110  3.9 2.620 16.46  0  1    4    4     10
#Mazda RX4 Wag  21   6  160 110  3.9 2.875 17.02  0  1    4    4     10

Он создает столбец 'newvar' ie. значение, хранящееся в объекте, аналогично переданному значению, например, 'fr', 'en', 'sp' в for l oop

...