簡體   English   中英

在R中使用帶有多個參數的匿名函數

[英]using anonymous functions in R with multiple arguments

我試圖在數據框中生成新變量,這些變量以數據框中的兩個(或更多)其他變量為條件。 我相信R中的循環函數(即lapply,sapply等)對於此目的是有用且有效的。 然而,根據我的方法,有些事情是不對的,我無法弄清楚是什么。

M <- data.frame(x=c("A", "A", "B", "B"), y=c(1,2,1,2))

使用這個數據框,我想生成一個新的列z,包含如果x == "A"y == 1則為TRUE的邏輯。 以下代碼是我能在這里得到的最好的代碼,但似乎只是評估我的第一個條件。

M$z <- sapply(M$x, function(x,y) if((x == "A") && (y == 1)) T else F, M$y)
  • 這個代碼可以修復我的目的嗎?
  • 有沒有更好的方法在R中執行此操作,可能使用其他循環函數?

看看mapply:

> M$z <- mapply(M$x,M$y, FUN=function(x,y) if((x == "A") && (y == 1)) T else F)
> M
  x y     z
1 A 1  TRUE
2 A 2 FALSE
3 B 1 FALSE
4 B 2 FALSE

Apropos,這與匿名函數無關,也與應用多個參數有關。 如果您對該函數進行了命名,則它仍然無法在任何單參數應用變體中使用。

另一種方法是按行進行ddply ,或將data.frame拆分為一個列表,每行都是一個單獨的條目。

這是transform功能的任務

transform(M, z=ifelse((x == "A") & (y == 1), T, F))
  x y     z
1 A 1  TRUE
2 A 2 FALSE
3 B 1 FALSE
4 B 2 FALSE

我認為更簡單的方法是

M$z <- with(M, (x == "A") & (y == 1))
M
  x y     z
1 A 1  TRUE
2 A 2 FALSE
3 B 1 FALSE
4 B 2 FALSE

暫無
暫無

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

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