[英]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)
,它為每種語言創建新列。
問題 #1 : for(**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.