如何使用R中的if语句根据列表的值命名元素 简言之,我的问题

如何使用R中的if语句根据列表的值命名元素 简言之,我的问题,r,R,假设我有一个两个向量的列表,每个向量都有6元素 我想使用if语句比较这两个向量的值。然后,在此之后,我想根据if语句的结果为每个元素指定一个名称 例子: 以下是我的尝试: for(1:6中的i){ 如果(z[[1]][i]>z[[2]][i]) z[[1]][[i]]我不确定您是否有使用and“if”语句和列表的特定原因,但如果您只是在列中查找结果,这是有效的: library(dplyr) df <- tibble( x = c(1,3,5,22,78,56), y = c(2,4,3

假设我有一个两个向量的列表,每个向量都有
6
元素

我想使用
if
语句比较这两个向量的值。然后,在此之后,我想根据
if
语句的结果为每个元素指定一个名称

例子: 以下是我的尝试:
for(1:6中的i){
如果(z[[1]][i]>z[[2]][i])

z[[1]][[i]]我不确定您是否有使用and“if”语句和列表的特定原因,但如果您只是在列中查找结果,这是有效的:

library(dplyr)

df <- tibble(
x = c(1,3,5,22,78,56),
y = c(2,4,3,21,88,77)
) %>% 
  mutate(result = case_when(
    x > y ~ "A",
    TRUE ~ "B"
  ))
库(dplyr)
df%
变异(结果=情况)(
x>y~“A”,
真的~“B”
))
case\u when
通常是if语句的一个很好的替代,并且运行得更快

如果您真的希望结果出现在列表中,您可以在最后执行以下操作:


df_listR中的“最佳”解决方案通常使用向量而不是循环。前面的示例使用向量。下面是另一个此类解决方案:

ifelse(z[[1]] > z[[2]], "A", "B")
如果您利用列表中的命名元素,此示例可能会使代码更加用户友好。在此示例中,列表中的名称被选择为与变量名称相同。它们可以是任何语法有效的名称。并且
list()
函数中的名称周围不需要引号

  z <- list(x = x, y = y)
  ifelse(z$x > z$y, "A", "B")
z$y,“A”,“B”)

这里有一个选项
Reduce(函数(x,y)ifelse(x>y,'A','B'),z)
另一个选项:
c(“B”,“A”)[do.call(`>`,z)+1]
前面注释的混合,
字母[Reduce(“>,z)+1L]
library(dplyr)

df <- tibble(
x = c(1,3,5,22,78,56),
y = c(2,4,3,21,88,77)
) %>% 
  mutate(result = case_when(
    x > y ~ "A",
    TRUE ~ "B"
  ))
ifelse(z[[1]] > z[[2]], "A", "B")
  z <- list(x = x, y = y)
  ifelse(z$x > z$y, "A", "B")