我正在lapply
内使用transform
。
所以这可以按预期工作:
dfX1 = data.frame(a = rpois(100, 10),
b = rpois(100, 10))
dfX2 = transform(dfX1, c = a %in% c(6, 7))
但是,当我尝试这样的事情时:
dfX3 = transform(dfX1,
c = apply(
do.call('cbind',
lapply(c(a, b),
function(x) x %in% c(6, 7))), 1, sum))
我得到了奇怪的结果:
> head(dfX3)
a b c
1 9 9 26
2 9 8 26
3 6 7 26
4 9 11 26
5 11 9 26
6 11 16 26
我的期望是lapply
会返回一个由cbind
强制转换为矩阵的向量列表,apply
会将函数sum
应用于行。
不确定我错过了什么。
答案 0 :(得分:3)
在这种情况下,问题来自c(a, b)
,这是cols a
和b
的串联。结果将是a
和b
中等于6或7的值的数量,沿着这些行重复。
按列表(a,b)替换c(a,b)会得到正确的结果。
此外,更合成的方式或这样做是
transform(dfX1, c= apply( data.frame(a,b), 1, function(u) sum(u %in% 6:7)) )