簡體   English   中英

R- boolean: for-loop (vector in vector)

[英]R- boolean: for-loop (vector in vector)

我從其他帖子的答案之一中找到了此代碼: R - 在單個變量中將多個值作為一個字符串處理

該代碼非常有用,但我很難理解帶有 for 循環的布爾值。

# 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)]))

我的問題是關於for (language in languages) d[[language]] <- grepl(language, d$lang) ,它為每種語言創建新列。

  • 問題 #1for(**vector** in **vector**)工作的? 它是否根據模式(語言)的長度創建新列(語言)的數量?

     for(language in languages)

    我只使用帶有數字的“for()”,

     for ( i in (1:n))

    並想知道如何使用 for(vector in vector)。

  • 問題#2 :這更令人困惑,我們如何使用未創建的語言列作為 prepl() 的模式?

     grepl(language, d$lang)

    因為尚未創建語言列,但它用作函數 grepl() 填充空語言列的模式...

我需要幫助來理解那條特定的線路。

如果我們做一個print語句

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

它以“語言”返回每個元素

在每個循環中,它檢查子字符串是否存在於那個 'lang' 中並從grepl創建一個 TRUE/FALSE 邏輯向量,它被分配( <- )作為作為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' 即。 存儲在對象中的值,類似於在for循環中傳遞的值,即 'fr', 'en', 'sp'

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM