lapply
適用於當您的數據是一個列表,這不是你在做什麼。
首先,您不會在data.frame
中找到NULL
條目。 NA
,當然,但不是NULL
,所以你應該圍繞is.na()
工作。接下來,您不需要測試if(x==TRUE)
; R知道如何使用if(x)
。好吧,這樣做是爲了生意;你是與你的ifelse
大部分的方式。您可以將矢量分配給ifelse
的輸出,它會照顧矢量化的爲你
data.1$X4 <- ifelse(is.na(data.1$X3),
NA,
ifelse(data.1$X3==TRUE,
data.1$X1+data.1$X2,
data.1$X1-data.1$X2))
data.1
## X1 X2 X3 X4
## 1 6 1 TRUE 7
## 2 7 2 FALSE 5
## 3 8 3 TRUE 11
## 4 9 4 FALSE 5
## 5 10 5 TRUE 15
這是醜陋的,但。 dplyr
包含非標準評估,其中涉及在名稱空間中搜索列,因此每次要引用列時都不需要引用數據名稱,從而使其更清晰。 dplyr::mutate
更改一列。
library(dplyr)
mutate(data.1, X4 = ifelse(is.na(X3),
NA,
ifelse(X3,
X1+X2,
X1-X2)))
data.1
## X1 X2 X3 X4
## 1 6 1 TRUE 7
## 2 7 2 FALSE 5
## 3 8 3 TRUE 11
## 4 9 4 FALSE 5
## 5 10 5 TRUE 15
我試過下面的代碼,它返回錯誤。 data.1 $ X4 <-lapply(data.1,function(x)ifelse(data.1 $ X3 == TRUE,data.1 $ X2-data.1 $ X1,data.1 $ X2 + data.1 $ X1)) – woshishui
請編輯該問題,不要將代碼添加到評論。另外,你說「返回錯誤」,告訴我們錯誤是什麼。不要讓我們輸入所有內容來獲得您應該提供的錯誤信息。你建議在data.frame的單元格中測試'NULL' ...你是否嘗試過在單元格中使用NULL來創建一個data.frame? – r2evans
順便說一句:既然你的'ifelse'按照定義做矢量數學,而你給它的矢量,爲什麼你需要'lapply'? (提示,你沒有。) – r2evans