Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/64.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 在应用族函数调用的函数中使用mutate_R - Fatal编程技术网

R 在应用族函数调用的函数中使用mutate

R 在应用族函数调用的函数中使用mutate,r,R,我正在尝试更改列表中存储为TIBLES的一些数据。 这个tibble列表是由一个包生成的 我不明白为什么我的功能不起作用。 如果我手动提取一个tibble元素,该函数可以工作,但不能在lappy中工作 我的职能: changesomethingtaxize <- function(x, whatchange=NULL, applyfunction=NULL){ library(lazyeval) ; mutate_call <- lazyeval::interp(~ a(b), a

我正在尝试更改列表中存储为TIBLES的一些数据。 这个tibble列表是由一个包生成的

我不明白为什么我的功能不起作用。 如果我手动提取一个tibble元素,该函数可以工作,但不能在lappy中工作

我的职能:

changesomethingtaxize <- function(x, whatchange=NULL, applyfunction=NULL){
library(lazyeval) ;
mutate_call <- lazyeval::interp(~ a(b), a = match.fun(applyfunction), b = as.name(whatchange) )
x %<>% mutate_(.dots = setNames(list(mutate_call), whatchange) ) 
return(x)
}

changesomethingtaxize我想我真的找到了原因D
由于NAs(列表中的空元素),Lappy可以工作,但没有返回任何内容

我添加了一个if(),该if()仅在tibble实际包含某些内容时才对其进行变异

在某些地方,这始终是一个NA问题!
我们希望这段代码有一天能帮助到某些人。

您提供的函数本身不可用,但看起来您正试图使用一个函数来修改非dataframe对象上的数据帧,而
mydata
包含该函数

我在这里使用
dplyr::mutate()
只是为了举例说明

您的数据包含
NA
s(在本例中为
logical
dplyr::mutate()
没有用于
logical
s的方法,我假设您尝试使用的函数也没有(或者根本没有处理
NA
值的方法)

您应该得到一个至少在概念上类似于以下内容的错误

lappy(mydata,函数(x)dplyr::mutate(x,col_to_modify=toupper(rank)))
#>UseMethod(“mutate_u2;”)中出错:没有适用于“mutate_2;”的方法应用于类“logical”的对象
为了避免这种情况,您可以提前检查列表,并注意哪些元素确实是数据帧

dfèu指数:海滨Zostera marina维管植物水藻
#>真假
#>丝状藻类
#>假的
使用
df_索引
,我们只能修改
mydata
中的那些元素,就像这样

mydata[df_索引]$`Zostera marina`
#>要修改的名称列组id列
#>1种植园王国202422种植园王国
#>2绿色植物亚种954898亚种
#>3链状植物次王国846494次王国
#>4胚胎植物超级区954900超级区
#>5气管植物科846496科
#>6精子门亚区846504亚区
#>7木兰属18063类
#>8百合亚属超目846542超目
#>9 Alismatales订单38883订单
#>10条带蕨科39069科
#>11 Zostera属39073属
#>12种斑条藻39074种
#> 
#>$`维管植物`
#>要修改的名称列组id列
#>1种植园王国202422种植园王国
#>2绿色植物亚种954898亚种
#>3链状植物次王国846494次王国
#>4胚胎植物超级区954900超级区
#>5气管植物科846496科
#> 
#>囊泡岩藻`
#>要修改的名称列组id列
#>1克洛米斯塔王国630578王国
#>2 Chromista亚王国590735亚王国
#>3 Phaeophyta分部660055分部
#>4 Phaeophyceae类10686类
#>5岩藻粉订单11328订单
#>6岩藻科11329科
#>7岩藻属11334属
#>8种囊泡岩藻11335种
#> 
#>$大型藻类
#>[1]NA
#> 
#>丝状藻类`
#>[1]NA
#> 
#>属性(,“类”)
#>[1]“分类”
#>属性(,“db”)
#>[1]“它”
请注意,
{purrr}
有一个很好的
map()
变量,用于处理这种情况
purrr::map_if()
接受一个
.p
(谓词)参数,您可以向该参数提供一个应用于
.x
的函数,并返回
TRUE
FALSE
。只有返回
TRUE
的元素才会被提供给
.f
的函数修改

purrr::map_如果(.x=mydata,.p=is.data.frame,
.f=~dplyr::mutate(.x,col_to_modify=toupper(rank)))
#>$`Zostera marina`
#>要修改的名称列组id列
#>1种植园王国202422种植园王国
#>2绿色植物亚种954898亚种
#>3链状植物次王国846494次王国
#>4胚胎植物超级区954900超级区
#>5气管植物科846496科
#>6精子门亚区846504亚区
#>7木兰属18063类
#>8百合亚属超目846542超目
#>9 Alismatales订单38883订单
#>10条带蕨科39069科
#>11 Zostera属39073属
#>12种斑条藻39074种
#> 
#>$`维管植物`
#>要修改的名称列组id列
#>1种植园王国202422种植园王国
#>2绿色植物亚种954898亚种
#>3链状植物次王国846494次王国
#>4胚胎植物超级区954900超级区
#>5气管植物科846496科
#> 
#>囊泡岩藻`
#>要修改的名称列组id列
#>1克洛米斯塔王国630578王国
#>2 Chromista亚王国590735亚王国
#>3 Phaeophyta分部660055分部
#>4 Phaeophyceae类10686类
#>5岩藻粉订单11328订单
#>6岩藻科11329科
#>7岩藻属11334属
#>8泡囊岩藻
mydata <- lapply(mydata, function(x) changesomethingtaxize(x, whatchange=rank, applyfunction=str_to_sentence) )