Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从每个列表中减去值';R中的s元素_R - Fatal编程技术网

从每个列表中减去值';R中的s元素

从每个列表中减去值';R中的s元素,r,R,我需要从R中的每个列表元素中减去指定的值。在本文中提到,对于这样的任务,使用apply函数族而不是循环。我试过以下几点: # Define list > a = 1:20 # Substraact this from each element > substract_me = 5 # Function for substracting > substract = function(x,y) { ret = x-y; return(ret) } # The problem

我需要从R中的每个列表元素中减去指定的值。在本文中提到,对于这样的任务,使用
apply
函数族而不是循环。我试过以下几点:

# Define list
> a = 1:20

# Substraact this from each element
> substract_me = 5

# Function for substracting
> substract = function(x,y) { ret = x-y; return(ret) }

# The problem is that I do not know how to access the current array element and pass it to substract function
lapply(a, substract)
提到匿名函数也可以使用,但它对我不起作用,我得到了语法错误。事实上,在我看来,它就像一种语法糖。问题仍然存在,当我使用
lappy
函数时,我需要一些占位符或其他东西,以便访问当前列表元素:

lapply(a, function([WHAT TO ADD HERE???],substract_me) substract([WHAT TO ADD HERE???],substract_me))

可能与此相关,但我没有从发布的代码片段中找出东西是如何工作的。

R中的减法是矢量化的

a = 1:20
substract_me = 5
a - substract_me
# [1] -4 -3 -2 -1  0  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15

这里不需要使用
apply
函数。

原始问题的标题询问如何将subtract应用于列表类型的r对象,但给出的示例是从向量
a=1:20
中减去的

MrFlick批准的答案对于vectors完全正确,但不适用于列表。例如,从以下整数向量列表中减去将失败

a <- list(v1 = 1:10, v2 = -5:5, v3 = 1:5)
# $v1
# [1]  1  2  3  4  5  6  7  8  9 10
# $v2
# [1] -5 -4 -3 -2 -1  0  1  2  3  4  5
# $v3
# [1] 1 2 3 4 5
subtract_me <- 5
a - subtract_me # produces a non-numeric argument to binary operator error

a
a
不是
列表
。请尝试
typeof(a)
class(a)
。请问我应该在什么时候使用*apply函数族?@WakanTanka我相信apply函数对r中的真正列表类型对象很有用。dataframes和data.tables是基于列表的对象的两个示例。我很想知道我们是否将_me作为三个元素的向量进行减去,并且我们希望使用Lappy从向量的对应元素中减去列表中的每个元素。i、 e.减去_me@Jisika我建议检查mapply函数。它允许您将列表或向量中的单个值传递到函数中。
subtract_me <- 5
lapply(a, function(x, subt_amnt) x - subt_amnt, subt_amnt = subtract_me)
# $v1
# [1] -4 -3 -2 -1  0  1  2  3  4  5
# $v2
# [1] -10  -9  -8  -7  -6  -5  -4  -3  -2  -1   0
# $v3
# [1] -4 -3 -2 -1  0