在通過函式傳遞資料框后,我在分配時被絆倒了。實際功能要大得多,但下面是一個示例。目標:如果季度列名稱在 active_quarters 向量中,則什么也不做。如果不是,則為資料框該列中的所有值分配空白。
我知道它正在嘗試明確參考“some_data_frame”,但我正在空白,雙關語,關于如何在給定回圈迭代的情況下正確分配空白。
代碼:
library(dplyr)
active_quarters <- c("Q1", "Q2")
data_frame_dummy <- data.frame("Q1" = c(1:4),
"Q2" = c(5:8),
"Q3" = c(9:12),
"Q4" = c(13:16))
create_blanks<- function(quarters_list,some_data_frame){
for(qcols in c("Q1", "Q2", "Q3", "Q4")){
if(qcols %in% quarters_list){
next
}else{
some_data_frame[,qcols] <<- ""
}
} # End of quarter if/else
} # End of function
create_blanks(active_quarters, data_frame_dummy)
結果:
> create_blanks(active_quarters, data_frame_dummy)
Error in some_data_frame[, qcols] <<- "" :
object 'some_data_frame' not found
期望的結果:
> data_frame_dummy
Q1 Q2 Q3 Q4
1 1 5
2 2 6
3 3 7
4 4 8
uj5u.com熱心網友回復:
<<-除非絕對必要,否則盡量不要使用。函式不應更改現有物件。所以只需讓函式回傳some_data_frame,然后根據需要顯式分配它。
create_blanks<- function(quarters_list,some_data_frame){
for(qcols in c("Q1", "Q2", "Q3", "Q4")){
if(qcols %in% quarters_list){
next
}else{
some_data_frame[,qcols] <- ""
}
} # End of quarter if/else
some_data_frame
} # End of function
data_frame_dummy <- create_blanks(active_quarters, data_frame_dummy)
data_frame_dummy
Q1 Q2 Q3 Q4
1 1 5
2 2 6
3 3 7
4 4 8
uj5u.com熱心網友回復:
這對你有用嗎?如果要將 0 分配給不在 .col 引數中的列,則可以取消選擇
library(tidyverse)
active_quarters <- c("Q1", "Q2")
data_frame_dummy <- data.frame("Q1" = c(1:4),
"Q2" = c(5:8),
"Q3" = c(9:12),
"Q4" = c(13:16))
data_frame_dummy |>
mutate(across(!active_quarters,.fns = ~ 0))
#> Note: Using an external vector in selections is ambiguous.
#> i Use `all_of(active_quarters)` instead of `active_quarters` to silence this message.
#> i See <https://tidyselect.r-lib.org/reference/faq-external-vector.html>.
#> This message is displayed once per session.
#> Q1 Q2 Q3 Q4
#> 1 1 5 0 0
#> 2 2 6 0 0
#> 3 3 7 0 0
#> 4 4 8 0 0
由reprex 包于 2022-01-23 創建(v2.0.1)
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/420125.html
標籤:
上一篇:R:內核密度的帶寬選擇問題
