【发布时间】:2012-12-21 19:15:59
【问题描述】:
假设我想将向量的每个偶数元素乘以 2,向量的每个奇数元素乘以 3。下面是一些可以执行此操作的代码:
v <- 0:10
idx <- v %% 2 == 0
v[idx] <- v[idx] * 2
v[!idx] <- v[!idx] * 3
如果我有两个以上的案例,这将变得很困难。似乎 apply 系列函数从不处理向量,所以我不知道解决这个问题的更好方法。如果我对数据进行转换,也许使用 apply 函数会起作用,但似乎这不应该是我解决这个简单问题所需要做的事情。
有什么想法吗?
编辑:很抱歉造成混乱。我对“%%”运算符并不特别感兴趣。我想在我的问题中加入一些具体的代码,但是根据对问题的回答,太具体了。我想弄清楚如何对列表的每个成员应用一些任意函数。这对于 apply() 是不可能的,我认为 sapply() 只适用于列表。
【问题讨论】:
-
你有什么建议?您可以在多种情况下使用
switch之类的东西。您当然可以在向量上使用apply系列:sapply(v, function(x) x + 1)。但我不明白你是如何摆脱使用一个你必须确定事情属于哪种情况的结构...... -
不清楚您所说的“如果我有两个以上的案例”是什么意思。您是否正在寻找可以使用
v %% nwheren > 2的东西? -
谢谢,贾斯汀。 sapply 完全按照您的描述工作,这正是我想要的。我正在查看 apply 系列函数的教程,并认为 sapply 只能列出一个列表。